UML-GRASP后4种模式

1、多态

1)、什么是多态

问题:if-else耦合度过高
解决:
    方法1:接口
    方法2:超类里需多态的方法前加上{abstract}

2)、相关模式

防止异变
大量GoF,如适配器(Adapter)、命令(Commond)、组合(Composite)、代理(Proxy)、状态(State)、策略(Strategy)模式

 

2、纯虚构

1)、什么是纯虚构?

举个例子:在数据库中保存Sale对象。根据信息专家模式可将保存Sale对象的职责分配给Sale自身,这将导致Sale中耦合了JDBC代码,与本身的职责“销售”不符了,此时,我们可以虚构一个对象,该对象专门处理数据库操作,如叫做PersistentStorage。该对象不存在概念模型中的。

纯虚构:当我们穷途末路时所捏造的某物

2)、相关模式

低耦合
高内聚
纯虚构通常接纳本来是专家模式所分配给该领域的职责
所有GoF设计模式都是纯虚构

3、间接性

1)、什么是间接性?

举个例子:

代付/收单系统分别需要写一遍连接建行/工行的代码,一是麻烦,二是银行接口变动时,代付/收单都要改。

而如果中间加一层:

只需要在适配器中对接银行,一旦接口变动也只需要更改适配器即可。

间接性-->纯虚构-->低耦合

2)、相关模式

适配器(Adapter)
桥(Bridge)
外观(Facade)
观察者(Observer)
中介(Mediator)

4、防止异变

1)、什么叫防止异变?

设计时,尽可能的减少因为变化带来的代码变更或较大变更。

2)、如何防止异变?

A、数据封装、接口、多态、间接性、标准(都是源于防止异变[PV]的)
B、数据驱动设计
C、服务查询:JNDI、webservice的UDDI
D、解释器驱动设计:读取外部配置文件、执行外部脚本。。。
E、反射(Method.invoke)或Meta-Level 设计
F、标准语言:如SQL
G、LSP:采用对接口的不同实现或扩展超类的子类防止异变。如下图:

无论传递任何ITaxCalculatorAdapter的实现类,该方法都应该“按照预期”工作。


再如:a.getB().getC().getD(),一旦迭代,随时会变更代码。可以获取其他对象,但是,不要太深,一般1级,即:a.getB()。

3)、相关模式或原则

多态、接口、间接性、数据封装
大部分的GoF模式

 

进入《GRASP前5种模式

posted @ 2019-08-02 11:39  遥远2  阅读(407)  评论(0编辑  收藏  举报