工厂模式的定义:
定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂模式(Factory Pattern),又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)。
工厂模式的优点:
- 工厂角色和产品角色的多态性。
- 在加入新的产品时,无需修改原有的抽象工厂和抽象产品提供的接口,只要添加一个具体的工厂和具体产品。系统扩展性好,符合开闭原则。
工厂模式的缺点:
- 增加新产品时要添加具体的产品类和工厂类。增加系统复杂度。
- 需要增加抽象层,增加系统理解难度。
工厂模式的适用场景:
- 客户端不知道它所需要的对象的类。在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体的产品对象由具体工厂类创建,可将具体工厂类的类名存储在配置文件或数据库中。
- 抽象工厂类通过其子类来指定创建哪个对象。在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏代换原则,在程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展。
练习
interface Image(){ public void readImage(); } class JpgImage implements Image(){ public void readImage(){ System.out.println("读取jpg图片"); } } class GifImage implements Image(){ public void readImage(){ System.out.println("读取gif图片"); } } interface ImageFactory(){ public Image create(); } calss JpgFactory implements ImageFactory(){ public Image create(){ JpgImage jpg = new JpgIMage(); return jpg; } } class GifFactory implements GifFactory(){ public Image create(){ GifImage gif = new GifImage(); return gif; } } //测试代码 Image image; Factory factory; factory = new JpgFactory(); image = factory.create(); image.readImage();