设计模式七大原则
开闭原则
面向修改关闭,面向扩展开放
里氏替换原则
注意点:
1、子类可以重写父类的抽象方法,但不能重写父类的已实现方法
2、子类重载父类的方法时候,方法的前置条件(即方法的输入参数)要比父类的方法更宽松
3、子类可以拥有自己持有的方法
4、子类重载父类方法的时候,最后返回的参数需要比父类严格。
因为父类在的地方可以由子类替代
如果子类重写了父类的方法,那么用子类替代父类的时候,调用被重写的方法,程序只会执行子类的方法,而不会执行父类的方法。所以就违背了父类在的地方可以由子类替代这句话。
同样的道理,重载父类前置条件应当比子类前置条件更严格,这样的话,同样的参数传入重载方法中,该参数范围在父类对象的范围内的话会默认执行父类对象,超出了父类对象的范围,则才执行子类对象。
若在继承时,子类的方法返回值类型范围比父类的方法返回值类型范围大,在子类重写该方法时编译器会报错。
如果在写代码时违背里氏替换原则,则代码出错的可能性会增加。
依赖倒置
将面向细节转变成面向抽象。
高层模块不应该依赖底层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
可以把接口作为参数传入。以这种形式实现面向抽象编程。
单一职责
一个方法尽可能做好一件事情【这样可以减少方法之间的耦合,并且提高代码的复用】
接口隔离
约束接口,降低类对接口的依赖
将庞大臃肿的接口细化成更小更具体的接口,隔离类对不需要方法的依赖,提高接口的灵活性。
注意点:
1、接口尽量小,但要有限度,一个接口只服务于一个子模块或业务逻辑
2、为依赖接口的类定制服务,只提供调用者需要的方法,屏蔽不需要的方法。
3、根据环境的不同,接口的拆分的方法也不一样
4、提高内聚,减少对外交互,用接口最少的方法完成最多的事情。
迪米特法则
不要和陌生人说话
两个实体间无需直接通信,可以通过第三方进行间接调用。
注意:
1、从依赖者的角度来说,只依赖应该依赖的对象。
2、从被依赖者的角度说,只暴露应该暴露的方法。
1、在类的划分上,创建弱耦合的类,类和类之间的耦合越弱,越有利于实现可复用
2、在类的结构设计上,尽量降低类成员的访问权限
3、类的设计上,优先考虑将一个类设置成不变类
4、在对其他类的引用上,将引用其他 对象的次数降到最低
5、不暴露类的属性成员,而提供相应的访问器
6、谨慎使用序列化功能。
降低类之间的耦合度,提高模块的相对独立性
提高类的可复用性和系统的扩展性。
组合/聚合复用原则
能用组合/聚合就不用继承
总结
其实几大原则的目的主要是为了降低对象间的耦合,增加程序的可复用性、可扩展性和可维护性。
参考:
http://c.biancheng.net/view/1354.html