第二天:装饰模式及面向对象设计原则4则

装饰模式是为已有功能动态地添加更多功能的一种方式.
当系统需要新功能的时候,是向旧系统中添加新的代码.这些新加的代码通常装饰了原有类的核心职责或主要行为.这样的结果等同于在主类中加入新的字段,新的方法和新的逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要.

装饰模式把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地,按顺序地使用装饰功能包装对象了.

优点:
把类中的装饰功能从类中搬移去除,这样可以简化原有的类.
有效地把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰模式.


面向对象的四个好处:可维护,可扩展,可复用,灵活性好
单一职责原则:如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这个类完成其他职责的能力.这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。

开放封闭原则是说软件实体(类,模块,函数等等)应该可以扩展,但是不可修改。
模块无法做到绝对封闭,但应在设计过程中,尽量猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化。

方法:
等到变化发生时立即采取行动,在我们最初编写代码时,假设变化不会发生变化。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。
好处:
面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。

依赖倒置原则:抽象不应该依赖细节,细节应该依赖于抽象(例子:CPU,内存,主板等自己是根据标准接口设计的)

里氏替换原则:子类型必须能够替换掉它们的父类型。

由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展
程序中所有的依赖关系都是终止于抽象类或者接口,就是面向对象的设计.

应用一则:

数据持久化功能开发:
对此功能应用装饰模式, 数据->词汇过滤->加密->持久化(数据库(sql,oracle),文件).
绿色标识部分应该考虑使用策略模式,应对加密算法的改变.
蓝色划线部分应该考虑使用依赖倒置原则,定义公共接口.  持久化模块和使用者依赖公共接口.而互相不知道对方的细节。
  虽然,面向对象设计原则已经学习了很多次了,也听了很多次了,但是仍然每学习一次就多一丝领悟加深一层理解。所谓笨鸟要靠时间积累才能飞,聪明的人也许看过一遍,两遍就学会了,那么我就看个八遍,十遍的,哪怕不会灵活运用也要理解精神。
原文地址:https://www.cnblogs.com/neking/p/2904172.html