(8)雷锋依然在人间——工厂方法模式
最后更新于:2022-04-01 14:30:17
### 工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。(摘抄)
工厂方法模式和简单工厂模式都是用于去创建新的类,但是工厂方法模式传承了简单工厂模式封装对象创建的过程,同时也改掉了简单工厂模式违背开放——封闭原则的缺点。
简单工厂模式,如果需要生产/去掉一个子类的话,那么需要在SimpleFactory类中修改 switch case 语句,所以违背了开放——封闭原则。
工厂方法创建对象是通过子工厂来创建,所以添加或删除子类的话是不需要改变原有的代码的。
~~~
class Factory
{
public Product create() {
// TODO Auto-generated method stub
return null;
}
}
class AFactory extends Factory
{
public Product create() {
// TODO Auto-generated method stub
return new AProduct();
}
}
class BFactory extends Factory
{
public Product create() {
// TODO Auto-generated method stub
return new BProduct();
}
}
class Product
{
public void domethod() {
// TODO Auto-generated method stub
}
}
class AProduct extends Product
{
public void domethod() {
// TODO Auto-generated method stub
}
}
class BProduct extends Product
{
public void domethod() {
// TODO Auto-generated method stub
}
}
//新增类
class CFactory extends Factory
{
public Product create()
{
return new CProduct();
}
}
class CProduct extends Product
{
public void domethod()
{
}
}
public static void main()
{
Factory factory = new AFactory();
Product product = factory.create();
product.domethod();
//新增一个类的话,那么只需要添加,而不需要修改原有代码,因为生产类的判断交给了客户端
factory = new CFactory();
Product newP = factory.create();
newP.domethod();
}
~~~
工厂方法模式差不多也就这样,还是那句话实际使用中必须活学活用,多种模式结合出来的四不像模式,也许才是正确的使用方法。。。
话说《大话》的例子越来越扯了。。。感觉解释还是蛮清楚,就是例子有点蛋疼,但是我也还蛮佩服作者,这样子也可以圆过来。。。
好希望自己把这本书看完之后,可以去看下那本Gof写的原版的设计模式,正好提升一下英文水平