设计模式七大原则
1.单一,一个类只做一件事情,降低类的复杂性。对系统的扩展性,维护性有非常大的帮助。 例如mvc,Model 层提供数据,view层专注前端视图的展示 controller层专注业务逻辑
3.开放封闭原则,一个类对扩展时开放的,对类的内部修改时封闭的。不应该通过修改来增加类的功能,而是通过扩展
5.子类尽量不要改变父类的原有功能
2.接口分离原则。一个接口对一个类进行负责。要高内聚,降低耦合度
4.(依赖倒置原则)面向接口编程,抽象类或者接口不要依赖实现类,实现应该依赖抽象。高阶层的模块不应该依赖低阶层的模块,应该依赖抽象。
6.尽量多使用组合和聚合等关联关系来代替 继承
7.迪米特法则:可以和朋友谈的不要和陌生人说话,最少知识法则。设计模式中的中介者模式,门面(外观)模式
类与类之间的关系:
泛化:实现或者继承
依赖:classA 使用classB ,classB的变化会影响ClassA,classA 与classB同层次。 classA 不拥有classB的 全局变量
关联关系:关联关系包括 聚合关系和合成关系
聚合关系(强关联关系,弱拥有关系):classA使用classB,classA是整体,classB是部分。classA 拥有classB的全局变量 但是classA没有classB的全局变量。可以在classA创建时不传入classB对象
合成(组合)关系(强关联关系,强拥有关系):classA 拥有classB的全局变量并且 classB生命周期和 classA的生命周期同步。
接口中只能有已经赋值的变量,和函数
接口中不能有含有方法体的函数,不能有未赋值的变量。
抽象类中可以有 abstract 方法和非abstract方法
非抽象类中不能有 非abstract 方法
装饰模式优点
1.被装饰者和装饰者之间的是松藕合关系,装饰仅依赖于,所以具体装饰仅知道他要装饰的对象,不需要知道具体的实例。
2.满足“开-闭原则”,不必要修改具体的组件
3.可以使用多个具体装饰来装饰具体组件的实例
使用场景
1.动态增加某个对象的功能,又不影响到该类的其他对象
2.采用继承来增强对象功能不利于系统的扩展和维护
中介者模式优点:
1.避免对象与对象之间的相互引用
2.通过中介者将原本分布于多个对象之间的交互行为集中在一起,当需要改变新得通信行为时,只需要使用一个具体的中介者,不必改变各个具体同事之间的代码
3.各个同事之间完全解耦
4.当对象想互相通信,有无法相互包含对方的引用时,使用中介者模式
使用场景
许多对象以复杂的方式交互,一个对象引用其他很多对象
优点:用户diamagnetic和某个特定类的子类的代码解耦
工厂方法使用户不必知道它所使用的对象是怎么被创建的只需要知道该对象有哪些方法即可
外观模式的优点
1.客户和子系统中的类无藕合,使子系统使用起来更加方便
适用场景
1.复杂的子系统,需要为用户提供过一个简单的交互操作
2.不希望客户客户代码和子系统中的类有藕合 (SDK封装的时候可以使用)
优点
1.具体主题和具体观察者是松藕合关系
2.满足开闭原则
试用场景
一个对象的数据更新时需要通知其他对象,但这个对象又不希望和被通知对象形成紧藕合,对象不知道具体有多少对象需要更新数据
命令模式:
观察者模式:
责任链模式
代理模式: