1、原则
1)、单一职责 只一个引起变化
2)、开闭 修改关闭、扩展开放=>接口、抽象类
3)、里氏代换 子类对象替父类对象
开闭补充,抽象化实现
4)、依赖倒置=>依赖抽象接口
5)、接口隔离=>依赖Min接口
6)、合成/聚合复用=>已有对象成为新对象一部分
聚合:整体<=部分 iphone<=os
合成:整体=部分 ALL=part
少继承
7)、迪米特=>低耦低赖 A类-->友元/中介-->B类
2、创建
处理对象创建
合适方式创建对象
具体类封装、隐藏实例创建和结合方式
对象创建型:处理对象创建;对象创建的一部分推迟到另一个对象
类创建型:处理类创建;对象创建推迟到子类中
2-1、简单工厂 SimplyFactory
SimplyFactory=>typeA:productA type多复杂
2-2、工厂方法 MethodFactory
TypeAFactory=>Factory
TypeAProduct=>Product....TypeZFactory复杂
2-3、抽象工厂abstract
TypeAFactory=>Factory
TypeAProduct=>ProductA0....ProductAn A0..An复杂
2-4、单列Singleton 扩展难 ==枚举
饿汉synchronized第1次使用:空间大
懒汉类加载:慢
双锁volatile/synchronized:效率差
内部类:多线程默认同步锁,同时延迟加载、线程安全
2-5、原型clone
对象A=new 类A, 对象B=对象A.clone 变化小
浅:A.GetClass=B.GetClass;A<>B
浅Cloneable:值
深Serializable:引用
3、结构
处理类/对象组合
模块之间耦合
3-1、适配器(对象)
适配器=>适配者(不兼容接口对象)
Client=>Target=>Adapter=>Adaptee
3-2、桥接
抽象部分与实现部分分离
继承关系=>弱关联(组合或聚合) 降耦 少类数量
桥接口=》扩展全部;抽象类=>桥接口,扩展全部继承
3-3、组合
整体/部分
容器(叶子)、容器(容器)对象类层次=>递归树形
3-4、装饰者
对象动态加/减职责
类A0、A1=>implements=>接口A{方法a}
abstract Decorator{方法b,Set 接口A} implements=>接口A{方法a}
注:+方法b
类DecoratorA0、A1=>extends=>Decorator
3-5、外观
统一接口=>访问子系统群接口
类WatchTvSwtichFacade{
类A0,A1.....AN
方法a0{A0.a0......AN.a0}
方法a1{A0.a1......AN.a1}
}
3-6、享元
相同或者相似对象大粒重用共享、变化小
抽象享元类A{参:外状态}
具体享元类B、C extends A
享元工厂F{B、C}{单例模式、简单工厂}
3-7代理
对象替身
抽象对象:目标、代理对象共同接口
目标对象代理对象使用一样
目标对象:代理对象所代表的目标对象
代理对象:代理对象内含目标对象,操作目标对象;
代理、目标对象相同接口,替代目标对象
客户端调用:传给目标前后执行操作
抽象对象 AbstractObject{方法A}
目标对象 RealObject extends AbstractObject{方法A}
代理对象 ProxyObject extends AbstractObject{RealObjec、方法A}
4、行为
类/对象=>交互、分配职责
算法、对象间职责分配
对象/类、之间通信方式
控制流转移到对象间关系
行为型类模式=>继承机制在类间分派行为
行为型对象模式=>对象复合非继承
4-1职责链
请求者->处理者0{}.....->处理者n
(处理者0.....n 动态增加/删除)
请求者:类A
abstract 处理B{ 处理{类A},后继者}
处理B0 extends Leader B{}
处理B1 extends Leader B{}
. .......................
处理Bn extends Leader B{}
4-2命令
请求对象
发出、执行命令
Receiver: 接收者
Command:abstract 命令A{Receiver,abstract方法A0{}}
ConcreteCommand extends Command{Receiver,Override 方法A0{})
Invoker: 调用者{Command,方法A0{}}
4-3解释器
环境类Context
abstract Expression{Context}
PlusExpression extends Expression{}
MinusExpression extends Expression{}
4-4迭代器
顺序聚合对象元素,不暴露内部
4-5中介对象
中介对象{交互对象A0.....交互对象An},不太多
abstract 中介A{相互A}
中介代理 extends 中介A{同事a...同事B}
abstract 相互A
同事a extends 相互A{中介A}
同事b extends 相互A{中介A}
................................
4-6备忘录
恢复状态,回到某个历史的状态
Originator: 原发器 创建备忘录
Memento: 备忘录
Caretaker: 负责人 保存备忘录
Caretaker.Mement1=Originator.Memento1
Originator.Memento2
Originator.Memento1=(Caretaker.Memento1)
4-7 观察者
发布-订阅(广播)
观察者n:1主题
interface 观察者I
观察者1 implements 观察者I
interface 主题I
主题1 implements 主题I{观察者1......观察者n}
4-8状态
内部状态<=>行为
interface IState
State0 implements IState
........................
Staten implements IState
Context{State0,......Staten}
4-9策略
算法族<>多条件
interface ISort
Sort0 implements ISort
........................
Sortn implements ISort
ArraySort{Sort0,......Sortn}
4-10模板方法
算法
代码复用子类实现
AbstractClass 模板方法{方法0...方法n,TemplateMethod{方法0...方法n}}
ConcreteClassA extends 模板方法{}
. ................................
ConcreteClassZ extends 模板方法{}
4-11访问者
数据结构稳定
操作变化
interface I被访问{I访问{}}
被访问a implements I被访问
..........................
被访问n implements I被访问
interface I访问
访问1 implements I访问{被访问a......被访问n}
访问2 implements I访问{被访问a......被访问n}
..........................
访问n implements I访问{被访问a......被访问n}
https://www.cnblogs.com/chenssy/archive/2013/05/24/3096161.html
https://www.cnblogs.com/oukele/p/10105005.html