设计模式之抽象工厂

来源:互联网 发布:缺少网络协议 编辑:程序博客网 时间:2024/04/27 14:15

学习了抽象工厂模式,感觉又比工厂方法更加先进了一些,它提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们的具体类。下面是结构图:


举一个具体的例子:需要生产一种杯子,材质有塑料和玻璃,外观有无盖和有盖。这时用简单工厂则只能生产出来杯子而没有材质外观之分,用工厂方法模式则满足不了自主选择材质和外观的需求。抽象工厂类图为:


抽象出来塑料杯子和玻璃杯子两个类,则可以根据需要无盖还是有盖灵活选择。假如又要增加一个木头杯子,则添加一个木头杯子类,便可以满足需求。

但是,如果要增加了一种可活动的杯盖呢。如果改了杯子工厂类,则需要改动的类太多,不满足开放-封闭原则。此时就可以把生产无盖和有盖的生产线再加上新加的活动盖的生产线放到一个类里面。用一个简单工厂来实现。


但是这样就有了杯子工厂的switch 无盖、有盖。如果加了活动盖,原来只需要加一个活动盖的类即可,现在就得用switch case来选择,这样就比较麻烦,所以就应用到了反射技术——外观=Assembly.Load("程序集名称").CreateInstance("命名空间.类名称"),这样就把“外观”变成了字符串,能用变量来处理了。反射技术是用来去除switch或者if判断。用到简单工厂就可以考虑反射技术,解除分支判断带来的耦合。


0 0
原创粉丝点击