面向对象
隔离变化,将变化的带来的影响将为最小;各个类的责任更加明确,分工更细化;封装了代码和数据,形成一系列可被使用的公共接口。
1. 依赖倒置原则(DIP)
2. 开放封闭原则(OCP):对扩展开放,对修改封闭(如:类模块可扩展,但不能修改)
3. 单一职责原则(SRP):一个类应仅有一个引起变化的原因,变化的方向隐含类的职责。
4. Liskov替换原则(LSP):子类必须替换它们的基类。
5. 接口隔离原则(ISP):隔离掉一些客户程序不依赖使用的方法。
6. 优先使用对象组合、而不是继承:继承的耦合度高,破坏了封装,而组合的耦合低。
7. 封装变化点:使用封装来创建对象之间的分界点,隔离变化和稳定。针对接口编程,而不是针对实现编程:不将变量声明为某个具体的类型,而是声明为某个接口,为一个抽象对象,减少系统内部各部分的依赖关系,来实现“高内聚、松耦合”的实现方案。
设计模式
Template Method:
定义一个操作中算法的骨架(稳定),将一些步骤延迟(变化)到子类中。可使得子类不改变(复用)一个算法的结构即可重新定义(复写)该算法的某些特定步骤。
注意:在具体实现方面,被template Method调用的虚方法可以具题实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将他们设置为protected方法。
Strategy:
定义一系列算法,把它们封装起来,并且是它们可以互相替换(变化)。可以独立于使用它的客户程序(稳定)的变化(扩展、子类化)。
注意:strategy及其子类为组件提供了一系列可复用的算法,从而使得类型在运行时方便根据需要在各个算法之间进行切换。提供了一种用条件判断语句以外的另一种选择,消除条件判断语句。Strategy对象没有实例变量,上下文共享一同个strategy对象,从而节省开销。
Observer/Event:
定义了对象的一对多(变化)的依赖关系,以便对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
注意:Observer使得可以独立改变目标与观察者,从而使两者松耦合。目标发送通知时,无需指定观察者,可以自动传播。由观察者自动选择是否需要订阅通知。
Decorator:
将一个对象增加一些额外的职责。Decorator比生成子类(继承)更为灵活,而且消除重复代码,减少子类个数。
使用组合而非继承,Decorator在运行时动态扩展对象的功能,而且可以根据需要扩展,避免使用继承而带来的灵活性降低。Decorator在接口上表现为is-a Component的继承关系。
Bridge:
将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立变化。
Bridge使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自变化的维度变化。Bridge类似于多继承方案,但多继承违背单一职责原则,复用性差,Bridge是比多继承方案更好的解决办法。
Factory Method:
用于创建对象的接口,让子类决定实例化某个类,Factory Method使得一个类的实例化延迟到子类,从而达到解耦的目的。
Factory Method用于隔离对象的使用者和具体类型之间的耦合关系,面对一个经常变化的具体类型,紧耦合关系(new)导致软件脆弱。Factory Method将所要创建的具体对象工作延迟到子类,是实现扩展的策略,但要求创建方法和参数都相同时才有效。
网友评论