模式:
一个特定的环境,一个问题,一个解决方案
核心思想:进行设计的复用
环境+问题+解决方案
设计模式:描述了定制化的相互通行的对象与类,以及解决特定环境中的通用设计问题。
单例模式:
确保一个类仅有一个唯一的实例,并且提供一个全局的访问点。
解决方案:
将构造函数声明称私有类型,屏蔽通过直接实例化的形式来访问;
控制全局只有一个实例的类-Static;
提供一个可以获得实例的方法,用于返回类的实例,并且保证得到的是同一个对象;
(是否已经存在,存在的话,直接返回;不存在的话,创建新的实例,再对外返回)
开闭原则:
对扩展开放,对系统修改封闭
抽象化是开闭原则的关键。
单一职责原则:
高内聚性原则
避免相同的职责(也称为功能)分担到不同的类中实现;
避免一个类承担过多的职责;
减少类之间的耦合关系;
“发现职责”并“分离职责”;
工厂模式:分离对象的“创建”和对象的“使用”
模板方法模式:分离“共性功能实现”和“个性扩展”
命令模式:分离“命令的请求者”和“命令的实现者”
里氏替换原则:
主要针对继承的设计原则;
子类型必须能够替换掉他们的父类型,并出现在父类能够出现的任何地方;
子类可以扩展父类的功能,但不能改变父类原有的功能;
原则:
子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法;
子类可以增加自己特有的方法;
当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松;
当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格;
依赖倒置原则:
将依赖关系倒置为依赖接口
上层模块不应该依赖于下层模块,他们共同依赖于一个抽象;
父类不能依赖子类,他们都要依赖抽象类;
抽象不能依赖与具体,具体应该要依赖于抽象;
接口隔离原则:
一个类对另外一个类的依赖性应该是建立在最小的接口上;
客户端不应该依赖那些他不需要的接口;
如何避免不良好的接口设计:
用多个专门的接口,而不是用单一的总结口;
一个接口就只代表一个角色;
使用接口隔离原则拆分接口时,首先必须满足单一职责原则
合成复用原则:
又称为组合/聚合复用原则;
尽量使用对象组合,而不是继承来达到复用目的;
一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象;
新对象通过委派调用已有对象的方法达到复用其已有功能的目的。
要尽量使用组合/聚合管理,少用继承。
迪米特法则:
要求一个软件实体应该尽可能少的与其他实体发生相互作用
(未完待续……)