往期回顾
【ZJ-001期】数据结构8期
【ZJ-009期】算法(十二):排序算法小结12期
【ZJ-021期】设计模式(一):开篇
【ZJ-022期】设计模式(二):简介
【ZJ-023期】设计模式(三):单例模式
查看往期内容可关注小姐姐公众号【程序媛日常吖】哟!!
工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式的主要角色
1)抽象工厂:提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
2)具体工厂:主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
3)抽象产品:定义了产品的规范,描述了产品的主要特性和功能。
4)具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。
工厂方法模式优缺点
优点
1.用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
2.灵活性增强,对于新产品的创建,只需多写一个相应的工厂类;
3.典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。
缺点
1.类的个数容易过多,增加复杂度;
2.增加了系统的抽象性和理解难度;
3.抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决
扩展
当需要生成的产品不多且不会增加,一个具体工厂类就可以完成任务时,可删除抽象工厂类。这时工厂方法模式将退化到简单工厂模式。
应用场景
1.当一个类不知道它所需要的对象类时 在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可;
2.当一个类希望通过其子类来指定创建对象时 在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏代换原则,在程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展。
3.将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。
实例下次分享,敬请期待!