1.简单工厂模式
基类(接口)--
定义功能(如计算器,需要两个参数,两个初始化参数的方法,一个返回两个数计算之后的值的方法GetResult());
具体实现类--
继承基类(实现接口),重写返回两个数计算之后的值的方法GetResult(),以实现不同的计算方式(如加减乘除);
工厂类
声明基类(接口),根据传进来的参数实例化相应的具体实现类。
返回实例化后的对象。
--上转型(接口回调);分类声明(接口声明),子类实例化(实现类实例化)。
客户端
1.声明基类(如运算类)
2.给工厂类传参(如“+”)
3.工厂类根据参数判断实例化相应的具体实现类,返回实例化的对象
4.根据工厂类返回的对象实例化开始声明的基类。
5.调用实例化之后的对象进行相应的操作。
优点
工厂类中包含了必要的逻辑判断,根据客户端的选择条件,动态实例化相关的类。对于客户端来说,去除了与具体产品的依赖。
2.工厂方法模式
-- 定义一个用于创建对象的接口,子类决定具体实例化哪个类;
使类的实例化延迟到工厂类的子类。
基础工厂类--只有创建对象的抽象方法。
具体工厂类--继承基础工厂类,实例化不同的对象。
客户端只需要实例化不同的具体工厂,就能用该工厂对象实例化不同的产品对象。不需要给工厂对象传递参数判断需要实例化的产品。
3.简单工厂--工厂模式相比较
工厂方法模式克服了简单工厂模式违背开发-封闭原则的缺点,保持了封装对象创建过程的优点。
工厂方法模式是简单工厂模式的进一步抽象和推广。
工厂方法缺点:每加一个产品,就需要加一个产品工厂的类,增加了开发量。