工厂模式

简单工厂模式:

总结一下步骤:
1.接口A:声明dosth();【我要去旅行】
2.不同的类(a1,a2)去实现A的不同方式的dosth();【方式:坐火车,坐飞机】
3.抽象出一个工厂类B,声明一个Create()方法控制使用哪一个类(a1,a2)去create;【实施旅行方案:选择做火车,选择做飞机】


工厂模式:

总结一下步骤:
1.接口A:声明dosth();【我要去旅行】
2.不同的类(a1,a2)去实现A的不同方式的dosth();【方式:坐火车,坐飞机】
3.抽象出一个接口工厂B,声明一个Create()方法做到dosth()【实施旅行方案】;
4.不同的类(b1,b2)去实现B的创造方法;【选择做火车,选择做飞机】

优点

工厂方法比简单工厂多了一层抽象。 
由于抽象工厂层的存在,当我们需要修改一个实现的时候,我们不需要修改工厂的角色,只需要修改实现的子类(a1,a2)【坐汽车,开车】就可以完成这个工作。 
同样,当我们需要增加一个新产品的时候,我们也不需要修改工厂的角色,只需要增加一个新的实现工厂(b1,b2)【选择开车】来完成实现就可以了。 
显然,这样更易于扩展,并且,整体代码的层级结构更加分明,创建实际产品的职责更加单一。 
此外,很显然客户在定义工厂角色的时候不需要知道实现子类。只有当实际需要创建的时候,才动态指定子类。这同样带来了代码的稳定性和最小可知性。

缺点

显然,使用工厂方法的代码量是多于简单工厂的。 
同时,每增加一个新的产品,就会增加一个新的工厂类,代码的复杂程度自然也随之上升了。我们会为此创建很多的工厂。

抽象工厂模式:

总结一下步骤:
1.多个接口A:声明dosth();【我要做很多事情】
2.多个不同的类(a1,a2)去实现A的不同方式的dosth();【我做每件事情的不同方式】
3.抽象出一个接口工厂B,声明每一个Create()方法(无所谓);【实施做每件事情的方案】
4.多个不同的类(b1,b2)去实现B的创造方法;【做每件事情的时候选择哪种方式】

优点

当我们需要增加一个产品族的时候,我们只需要增加一个工厂(b1,b2),实现其中所有产品的实现就行了。 
抽象工厂的设计,使得我们可以很容易的增加一个产品系列。

缺点

抽象工厂当中,产品族的定义使得子类必须去实现所有的产品生产【b要实现B的所有方法】。 
因此,抽象工厂并不适合于横向扩展,即需要增加产品的情况【 增加我要做的事情的数量】。 
一旦需要增加产品,那么我们甚至需要去修改抽象的基类【A】。这是比较违反开闭原则,不太符合面向对象设计的做法。

部分内容引自:https://blog.youkuaiyun.com/yuechuzhao/article/details/46963559

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值