一句话的设计模式(转)

news/2024/7/5 2:19:17

如题,实际上,我想这是很困难的。

除非——只是为了给自己做一个提醒,能够看一眼就快速回想起该设计模式的种种记忆。

下列是我之前在学习《大话设计模式》时做的笔记总结,当中有部分措辞来自其作者程杰。(非常感谢他为神秘的设计模式搭建了如此平滑的学习通道)

1. 创建型:

(1)单例:只需一个实例时考虑。

(2)工厂方法:一般先用工厂方法解决对象创建问题。

(3)抽象工厂:当工厂方法无法满足多系列问题时,再重构为抽象工厂。

(4)建造者:多个部件的建造实现相同,只是所需部件、建造顺序不同时考虑。

(5)原型:在初始化信息不发生变化时考虑。

2. 结构型:

(1)适配器:让接口不相容的类能协同工作。(亡羊补牢)

(2)装饰:动态增加单个对象的额外职责,比生成子类更灵活。

(3)桥接:使继承关系更改为组合关系,使两者可独立变化。(未雨绸缪)

(4)组合:用树状结构表示“整体-部分”的层次关系,使单个对象(叶节点)与组合对象(枝节点)的使用具有一致性。

(5)享元:为运用共享技术,支持大量细粒度对象,节省开销。

(6)代理:控制对单个对象的访问。

(7)外观:子系统的高层接口,避免两个类直接关系的第三者。

3. 行为型:

(1)观察者:一对多依赖关系,一端变化、多端得到通知并自动更新。(目标与观察者可实现弱耦合)

(2)模板方法:继承+重写解决代码重复问题。

(3)命令:将请求发送者与具体实现者解耦,可对请求排列、取消、重做,支持事务。(多请求,单处理)

(4)职责链:将处理者排成链,沿链传递请求。(单请求,多处理)

(5)状态:当对象内状态改变而执行不同操作时考虑,状态转移逻辑不在if/switch中,而在各子类之间,增/改状态和状态转换较容易。

(6)解释器:若某特定问题发生的频率足够高时考虑,需定义文法表示与解释器本身。

(7)中介者:由中介封装一系列对象交互,减少对象间耦合,利于复用。(朋友多)

(8)访问者:当Element较稳定、Visitor易增加时考虑。(朋友在精不在多)

(9)策略:将一系列算法逐个封装并可相互替换,易于切换、理解、扩展。

(10)备忘录:不破坏封装,又要取该对象内状态,且要求状态还原时考虑。(保持封装边界)

(11)迭代器:将对集合的访问与遍历从集合对象中分离出来到迭代器中。

 

http://www.cnblogs.com/lzhlyle/p/4696645.html

 


http://lihuaxi.xjx100.cn/news/244677.html

相关文章

使用PostMan测试文件上传接口

1.header,由于没有登录不能访问,要传一个token 2.body,见图 ApiOperation(value "上传身份图片返回上传后文件名") PostMapping(value "/uploadImgFile", headers "content-typemultipart/form-data") public ErrorObject u…

极限编程 (Extreme Programming) - 迭代计划 (Iterative Planning)

(Source: XP - Iteration Planning) 在每次迭代开始时调用迭代计划会议,以生成该迭代的编程任务计划。每次迭代为1到3周。 客户从发布计划中按照对客户最有价值的顺序选择用户故事进行此次迭代。还选择了要修复的失败验收测试。客户选择的用户故事的估计总计达到上次…

Jvm面试题总结及答案 300道(针对Jvm的面试题 )

Jvm面试题及答案(Jvm面试题大全带答案)发现网上很多Jvm面试题及答案整理都没有答案,所以花了很长时间搜集,本套Jvm面试题大全,有大量经典的Jvm面试题以及答案,包含Jvm语言常见面试题、面试经验技巧等&#…

【实用总结】DOM节点className操作

经常用到的小工具函数,每次用到都重写一遍,有点浪费体力,于是决定分阶段整理下,需要用到的时候就直接拷过来用了~ 对于dom节点的className,常用操作不外乎增、删、查(改可以用增删事先&#xff…

Postman系列之@RequestBody修饰的对象传参数

请求地址:http://localhost:8283/api/tblContractPre/updateContractInfoToErp 请求参数: { "city":"深圳市", "uid":"张三", "deedsn":"PRE-HA180900061", "rooms…

Matlab之print,fprint,fscanf,disp函数

print: print函数可以把函数图形保存成图片: [plain] view plaincopy minbnd -4*pi; maxbnd 4*pi; t minbnd:0.1*pi:maxbnd; plot(t, sin(t), g, Linewidth, 2); line([minbnd, maxbnd], [0, 0]); %绘制x轴 axis([-10, 10, -2, 2]) %定义显示的坐标区…

一个free异常引发的异常

有同事反馈说自己的线程不工作,查看堆栈发现其打印如下: #0 0x00007f291f72e7be in __lll_lock_wait_private () from /lib64/libc.so.6 #1 0x00007f291f6c2e4e in _L_lock_9925 () from /lib64/libc.so.6 #2 0x00007f291f6c1101 in free () from /li…

房价与阶级

最近一线城市房价似乎大幅度飙升,有人说这是崩溃前夕的疯狂。今晨在微博上看到,王健林说未来20年一线城市的房价会持续上涨,评论区里被谩骂淹没。关于大城市房价,我没有能力做任何分析和预测。只对崩溃论发表一些想法。前几天逛汽…