设计模式
策略模式
对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
设计原则 1
找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起
设计原则 2
多用组合,少用继承
设计原则 3
针对接口编程,而不是针对实现编程
观察者模式
reference
定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新
设计原则 4
为了交付对象之间的松耦合设计而努力
装饰者模式
动态地将责任附加到对象上。若要拓展功能,装饰者提供了比继承更有弹性的替代方案。
优点
1、装饰者模式可以提供比继承更多的灵活性
2、可以通过一种动态的方式来扩展一个对象的功能,在运行时选择不同的装饰器,从而实现不同的行为。
3、通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。可以使用多个具体装饰类来装饰同一对象,得到功能更为强大的对象。
4、具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,在使用时再对其进行组合,原有代码无须改变,符合“开闭原则”。
缺点
1、会产生很多的小对象,增加了系统的复杂性
2、这种比继承更加灵活机动的特性,也同时意味着装饰模式比继承更加易于出错,排错也很困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为烦琐。
装饰者的使用场景
1、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
2、需要动态地给一个对象增加功能,这些功能也可以动态地被撤销。当不能采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时。
工厂模式
命令模式
将请求封装成对象,以便使用不同的请求,队列或日志才参数化其他对象
适配器模式
模板方法模式
迭代器模式
提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示
设计原则 5
单一责任,一个类应该只有一个引起变化的原因。
内聚:度量一个类或模块紧密地达到单一目的或责任。
组合模式
允许讲对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合
状态模式
允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
这个模式将状态封装成为独立的类,并将动作委托到代表当前状态的对象
代理模式
代理模式和装饰者模式的区别:
装饰者为对象添加行为
代理是控制对象的访问
远程代理
虚拟代理
一种常用的代理模式,对于一些占用系统资源较多或者加载时间较长的对象,可以给这些对象提供一个虚拟代理。
在真实对象创建成功之前虚拟代理扮演真实对象的替身,而当真实对象创建之后,虚拟代理将用户的请求转发给真实对象。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。