public class ConcreteBook { private int ID; private String name; private String author; // 构造函数 public ConcreteBook(int ID, String name, String author) { this.ID = ID; this.name = name; this.author = author; } //显示图示信息 public void show() { System.out.println(ID + "**" + name + "**" + author); } }
public class BookFactory { public ConcreteBook getBook(int ID) { ConcreteBook book = null; switch (ID) { case 1: book = new ConcreteBook(ID, "设计模式", "GoF"); break; case 2: book = new ConcreteBook(ID, "我的设计模式", "空对象模式"); break; default: book = null;// 其实这个可以省略,因为初始化已经赋值为null。 break; } return book; } }
public class Client { static void main(String[] args) { BookFactory bookFactory = new BookFactory(); ConcreteBook book = bookFactory.getBook(1); book.show(); } }运行结果:
3、使用空对象模式
首先定义一个抽象接口Book类public interface Book { // 判断Book对象是否为空对象(Null Object) public boolean isNull(); // 展示Book对象的信息内容。 public void show(); }然后新增一个空对象类NullBook类和一个非空对象类ConcreteBook类
public class NullBook implements Book { public boolean isNull() { return true; } public void show() { System.out.println("Sorry,未找到符合您输入的ID的图书信息,请确认您输入的不是非法值。"); } }
public class ConcreteBook implements Book{ private int ID; private String name; private String author; // 构造函数 public ConcreteBook(int ID, String name, String author) { this.ID = ID; this.name = name; this.author = author; } public void show() { System.out.println(ID + "**" + name + "**" + author); } public boolean isNull(){ return false; } }
public class BookFactory { public Book getBook(int ID) { Book book;//将原来的ConcreteBook改为Book switch (ID) { case 1: book = new ConcreteBook(ID, "设计模式", "GoF"); break; case 2: book = new ConcreteBook(ID, "我的设计模式", "空对象模式"); break; default: book = new NullBook();//创建一个NullBook对象 break; } return book; } }
public static void main(String[] args) { BookFactory bookFactory = new BookFactory(); Book book = bookFactory.getBook(-1); book.show(); }