上期简单工厂模式的弊端
工厂方法模式概述
工厂方法模式:定义一个用于创建对象的接口,让其子类决定将哪一个类实例化,工厂模式让一个类的实例化延迟到了其子类,被称为工厂模式,又被成为虚拟构造器模式,也是一种创建型模式。
图中我们可以得知有四个角色
(1)抽象产品Product,工厂模式所实例化对象的超类,产品对象的公共父类
(2)ConcreateProduct 具体产品类,实现抽象产品接口,由专门的工厂所创建,具体工厂与产品一一对应。
(3)Factory 抽象工厂:声明工厂方法用于返回一个产品,是工厂方式模式的核心,所有创建产品对象的具体工厂类必须实现此接口。
(4)ConcreatedFactory 具体工厂:由客户端调用,返回一个具体产品类的实例。
使用反射跟配置文件注入对象
工厂方法的隐藏
多态工厂的总结
优点
(1)作为简单工厂的衍生,多态工厂更具有可扩展性,并且还将具体产品实现的细节对客户端进行了隐藏,客户端无需知道具体产品的类名。
(2)多态工厂模式是基于产品和工厂的多态,具体工厂能够让某种工厂实例化自身对象,执行对某种具体产品的操作。
(3)使用多态工厂模式最大的优点在于,新增一个产品时不需要更改原有的代码,只需要增加具体工厂和具体产品,具体工厂继承抽象工厂,具体产品继承抽象产品。
缺点
(1)多态工厂在添加新的产品或工厂时,都需要添加新的类,这对系统的复杂度有一定的提升。
(2)抽象工厂将实例化的职责交给了其子类,而具体某个工厂将交由配置文件或是DDO,反射等技术实现,同样一定程度上增加了系统复杂度。
应用场景
(1)客户端不需要知道具体产品的类名,要知道对应的工厂,具体产品由具体工厂所创建。
(2)具体工厂实例化自身,用到面向对象的多态性和里氏替换原则,在程序运行时,子类对象覆盖父类对象,系统将更容易扩展。