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种模式》