设计模式6大原则:
1.单一职责原则
2.里氏替换原则
2.1 父类出现的地方,子类就可以出现
3.依赖倒置原则
3.1 高层不依赖底层,高层与底层都依赖于抽象;抽象不依赖于细节;细节依赖于抽象; 高层:包含多个原子方法,底层:原子方法,抽象:接口或抽象类.细节:实现类,
4.接口隔离原则
4.1 实例接口 类接口 客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上
5.迪米特法则
5.1 迪米特法则(核心观念就是类间解耦,弱耦合)4层含义: 5.1.1只和朋友交流 朋友类:出现在成员变量或方法输入输出参数的类. 5.1.2 朋友间也是有距离的(私有方法与公共方法 耦合内聚 降低变更风险)
6.开闭原则
6.1抽象约束 三层含义:1>通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口中或抽象类中不存在的public方法.2>参数类型、引用对象尽量使用接口或者抽象类,而不是实现类。3>抽象层尽量保持稳定,一旦确定既不允许修改.
6.2 元数据控制模块行为
元数据:用来描述环境和数据的数据,通俗地说就是配置参数,参数可以从文件中获得,也可以从数据库中获得.
6.3 封装变化 1>将相同的变化封装到一个接口或抽象类中;2>将不同的变化封装到不同的接口或抽象类中,不应该有两个不同的变化出现在同一个接口或抽象类中.
20180605
第二部分 23种设计模式
1 单例模式 饿汉式(X x = new X()) 懒汉式(X x = null if(x==null) 线程不安全)
单例模式的扩展 : 需要产生固定数量对象的模式叫做有上限的多例模式.
2.工厂方法模式
定义:用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类.
3.抽象工厂模式
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类.
4.模版方法模式
定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类不改变一个算法的结构即可重定义该算法的某些特定步骤.
钩子方法:在抽象类中写一个非抽象类的方法,在模版方法中使用这一方法当做条件,实现类里面重写这一方法,从而影响模版方法的执行结构.
5.建造者模式(也叫做生成器模式)
定义:将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示.
6.代理模式(也叫委托模式)
定义:为其他对象提供一种代理以控制对这个对象的访问.
普通代理:客户端只能访问代理角色,而不能访问真实角色.
强制代理:必须通过真实角色查找到代理角色,否则你不能访问.
动态代理:在实现阶段不用关心代理谁,而运行阶段才制定代理哪一个对象.(使用了JDK Invocationhandler Proxy类)
7.原型模式
定义:用原型实例指定创建对象的种类,并且通过这些原型创建新的对象.(即实现Cloneable接口)
8.中介者模式(调停者模式)
定义:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
Mediator 抽象中介者角色 定义统一的接口,用于各同事角色之间的通信。
Concrete Mediator 具体中介者角色 通过各同事角色实现协作行为,因此它必须依赖于各个同事角色。
Colleague 同事角色 每一个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要用中介者角色协作。每个同事类的行为分为两种:一种是同时本身的行为,比如改变对象本身的状态,处理自己的行为等,这种行为叫自发行为(Self-Method),与其他的同事类或中介者没有任何的依赖;第二种是必须依赖中介者才能完成的行为,叫做依赖方法(Dep-Method).
9.命令模式(一个高内聚的模式)
定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能.
Receive接受者角色 该角色就是干活的角色,命令传递到这里是应该被执行的,具体到我们上面的例子中就是Group的三个实现类.
Command命令角色 需要执行的所有命令都在这里声明.
Invoker调用者角色 接收到命令,并执行命令.在例子中,我(项目经理)就是这个角色.
10.责任链模式
定义:使多个对象都有机会处理请求,从而避免了请求者与接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止.
责任链模式屏蔽了请求的处理过程,你发起的请求到底是谁处理的,这个 你不用关心,只要你把请求抛给责任链的第一个处理者,最终会返回一个处理结果(当然也可以不做任何处理),作为请求者可以不用知道到底是需要谁来处理的,这是责任链模式的核心.
待续...