设计模式之禅
单一职责原则
定义:应该有且仅有一个原因引起类的变化。
接口,类,方法:一个方法只做一件事。我们建议接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化(只有一个接口?)
接口的设计要有限度,颗粒度要符合项目。
里氏替换原则
定义:所有引用基类的地方必须能透明的使用子类的对象。(多态:父类能出现的地方子类就可以出现,并且可以替换为子类)
目的:是为了防止子类覆盖父类的方法,如果要覆盖,为什么要继承。子类可以扩展父类的方法的接收范围,但是不能改变父类的功能。
要求我们符合规范:1子类必须完全实现父类的方法(接口和抽象类) 2子类可以有自己的其他方法和属性 3实现和覆盖父类的方法时输入的参数可以被放大(方法的重载:其他一样,方法的参数不一样,这个参数是放大的,不然父类存在的地方,子类不一定可以存在,违背里氏替换原则) 4实现和覆盖父类的方法的结果可以被缩小(返回值类型父类大于子类:是继承关系)
依赖倒置原则
定义:模块之间的依赖通过接口和抽象类发生,实现类不直接发生依赖关系。接口和抽象类不依赖实现类。实现类依赖接口和抽象类。-面向接口编程。
面向接口编程:使我们的项目可以不用是单线程的编程,而实现的是并行编程。(两个类有依赖关系,只要制定出接口或者抽象类,通过多态,这两个类就可以独立的开发和测试)
接口和抽象类:是一种契约和约束。
三种实体类间的依赖传递:1通过构造函数 2setter方法 3接口中直接定义
接口隔离原则
实例接口:Person p=new Person(); 类接口:interface
定义:客户端不应该依赖它不需要的接口,类之间的依赖关系应该建立在最小的接口上。
根据我们项目的实际需要设计最小接口,接口内不要太多的杂糅。
规范约束:1 接口尽量小(单一职责原则) 2 接口高内聚()3 定制服务 4 接口的设计符合项目,要有限度颗粒
迪米特法则
定义:最小知识原则:一个对象应该对其他对象有最少的了解。
组合,聚合,依赖:都是耦合关系。 朋友类:成员变量,方法中的输入输出参数中的类。
所以迪米特法则的我们的一个类只和朋友类交流,但是不和陌生类交流。
朋友间的距离:不应该暴露太多东西给朋友,我们能封装就封装。尽量减少public成员变量和方法。
总结:类间解耦,弱耦合。0 1 就是完全解耦。
开闭原则
什么是开闭原则:软件实体(类,模块,方法)对扩展开放,对修改关闭。通过使用扩展实体的行为来实现变化,而不是通过修改代码实现变化。
为什么要使用开闭原则: 采用开闭原则才能更好的通过测试,代码复用性,可维护性,面向我们开发的需求。
怎么使用开闭原则:抽象约束:接口和抽象类的扩展边界(接口中的方法),尽量使用的是接口和抽像类,而不是实现类,抽象层不能修改。元数据控制模块行为:框架配置我们需要的数据。指定项目章程:项目的团队的大家遵守某个协议。封装变化:将相同的变化的封装到接口和抽象类,将不同变化的封装到不同的接口和抽象类。