设计模式之简单工厂(Simple Factory)
//工厂主要生产物品的抽象接口(该工厂主要生产书本) public interface Book { public String name(); public int TotalPages(); public double price(); }
//工厂生产数学书 public class MathBook implements Book{ @Override public int TotalPages() { return 200; } @Override public String name() { return "Math Book"; } @Override public double price() { return 17.5; } }
//工厂生产英语书 public class EnglishBook implements Book{ @Override public int TotalPages() { return 153; } @Override public String name() { return "English Book"; } @Override public double price() { return 23.2; } }
//简单工厂类 //缺点在于每次增加一个种类的新书,都需要在工厂类里面写一下配置。 //优点是将对象的创建与测试端分离,对测试端隐藏了对象的具体创建过程 public class Factory { public static Book create(String bookName) {//根据书名生产相应的书籍 Book book = null; if(bookName.equalsIgnoreCase("Math")) { book = new MathBook(); } else if(bookName.equalsIgnoreCase("English")) { book = new EnglishBook(); } return book; } }
public class Main { //测试类 public static void main(String[] args) { Book book = Factory.create("English"); if(book != null) System.out.println("Name:"+book.name()+"\nPrice:"+book.price()); else System.out.println("Cannot create the Book"); book = Factory.create("Math"); if(book != null) System.out.println("Name:"+book.name()+"\nPrice:"+book.price()); else System.out.println("Cannot create the Book"); book = Factory.create("News"); if(book != null) System.out.println("Name:"+book.name()+"\nPrice:"+book.price()); else System.out.println("Cannot create the Book"); } }
运行结果:
Name:English Book Price:23.2 Name:Math Book Price:17.5 Cannot create the Book
简单工厂模式主要是为了程序的解耦和,如果程序中有很多个地方使用了new MathBook(),以后由于程序修改的原因,MathBook类要重新改名成MathNews;
那我们就需要把所有关于new MathBook()的地方全部修改一次,这样做是不符合软件设计的原则的。
然后就是工厂向客户隐藏了具体的细节,用户需要什么书,工厂负责生产出对应的书就好了,用户不需要知道具体生产书本的细节。
项目下载链接:http://www.kuaipan.cn/file/id_132802506211221470.htm?source=1