设计模式(1)
2
4 用GoF设计模式设计用例实现
适配器模式(GoF)
工厂模式(GoF)
单子模式(GoF)
策略模式(GoF)
组合模式(GoF)
外观模式(GoF)
观察者/发布-订阅/委托事件模式(GoF)
在POS系统中,需要和多个外部系统交互(库存系统、税金计算器、账务系统等)。
以使用第三方税金计算器为例
使用A计算器
TaxA atax= new TaxA();
(,,);
使用B计算器
TaxB atax= new TaxB();
(,,,);
代码中有两个容易变化的地方:计算器的类名、计算器提供的方法名
2。使用适配器来屏蔽接口的差异
class TaxAdaptor
{
TaxA tax=new TaxA();
float getTaxes()
{
return ();
}
}
3。代码变为
TaxAdaptor adaptor ;
adaptor =new TaxAAdaptor();
(...);
TaxBdaptor adaptor ;
adaptor =new TaxBAdaptor();
(...);
接口统一了,但是代码还是和具体的类耦合!
继续想办法!
4。创建适配器的抽象来屏蔽不同的适配器
ITaxCalculatorAdaptor adaptor ;
adaptor =new TaxAAdaptor();
(...);
ITaxCalculatorAdaptor adaptor ;
adaptor =new TaxBAdaptor();
(...);
现在,就剩红色字体处要出来啦~
继续想办法!
6
4 用GoF设计模式设计用例实现
问题:如何解决接口不兼容的问题或为不同接口但相似的组件提供一个稳定的接口?
解决方案:通过一个中间的适配器对象将组件的原来接口转换为另一个接口。
4 用GoF设计模式设计用例实现-适配器模式
适配器模式类图
7
8
4 用GoF设计模式设计用例实现-适配器模式
ountingAdaptor负责将postSale接口适配成外部服务的接口
client
Adapter
Adaptee
有一个类(adaptee)实现了数学中的幂次运算,方法中需要传入两个参数,一个是基数base,另外一个是幂次exp。现在客户端需要一个求得一个数的平方的函数接口(target),传入一个数,得到它的平方值。
请应用适配器模式进行设计,绘制类图。
9
10
4 用GoF设计模式设计用例实现2-工厂模式
考虑:在前面外部服务适配器解决方案中,谁去负责创建这些适配器?谁去确定要创建的是哪个适配器,是TaxMasterAdapter 还是GoodAsGoldTaxProAdapter?
让领域类(如Sale)来创建适配器对象是否合适?--如此则领域类不只是包含应用逻辑了!
一个设计原则:设计要保证分离不相关的事物。分离不同的事物到不同的领域,从而使得分离的各部分能达到高内聚的设计目标。
2015-OO-设计模式(1)(2) 来自淘豆网www.taodocs.com转载请标明出处.