我在Java论坛看到这篇文章作者以轻松语言比喻了java32种模式有很好启发作用但可惜没有给出具体意思我就在后边加上了这些都是最简单介绍要学习话建议你看下阎宏博士Java和模式书
创建型模式
1、FACTORY—追MM少不了请吃饭了麦当劳鸡翅和肯德基鸡翅都是MM爱吃东西虽然口味有所区别但不
管你带MM去麦当劳或肯德基只管向服务员说“来 4个鸡翅”就行了麦当劳和肯德基就是生产鸡翅Factory
工厂模式:客户类和工厂类分开消费者任何时候需要某种产品只需向工厂请求即可消费者无须修改就可以接
纳新产品缺点是当产品修改时工厂类也要做相应修改如:如何创建及如何向客户端提供
2、BUILDER—MM最爱听就是“我爱你”这句话了见到区别地方MM,要能够用她们方言跟她说这句话哦
我有个多种语言翻译机上面每种语言都有个按键见到MM我只要按对应键它就能够用相应语言说出“我爱你
”这句话了国外MM也可以轻松搞掂这就是我“我爱你”builder(这定比美军在伊拉克用翻译机好卖)
建造模式:将产品内部表象和产品生成过程分割开来从而使个建造过程生成具有区别内部表象产品对象建造
模式使得产品内部表象可以独立变化客户不必知道产品内部组成细节建造模式可以强制实行种分步骤进行建造
过程
3、FACTORY METHOD—请MM去麦当劳吃汉堡区别MM有区别口味要每个都记住是件烦人事情我般采
用Factory Method模式带着MM到服务员那儿说“要个汉堡”具体要什么样汉堡呢让MM直接跟服务员说就行
了
工厂思路方法模式:核心工厂类不再负责所有产品创建而是将具体创建工作交给子类去做成为个抽象工厂
角色仅负责给出具体工厂类必须实现接口而不接触哪个产品类应当被例子化这种细节
4、PROTOTYPE—跟MM用QQ聊天定要说些深情话语了我搜集了好多肉麻情话需要时只要copy出来放到
QQ里面就行了这就是我情话prototype了(100块钱份你要不要)
原始模型模式:通过给出个原型对象来指明所要创建对象类型然后用复制这个原型对象思路方法创建出更多
同类型对象原始模型模式允许动态增加或减少产品类产品类不需要非得有任何事先确定等级结构原始模型模式
适用于任何等级结构缺点是每个类都必须配备个克隆思路方法
”都是指同个人那就是我(刚才做了个梦啦哪有这么好事)
单例模式:单例模式确保某个类只有个例子而且自行例子化并向整个系统提供这个例子单例模式单例模式只
应在有真正“单例子”需求时才可使用
结构型模式
6、ADAPTER—在朋友聚会上碰到了个美女Sarah从香港来可我不会说粤语她不会说普通话只好求助于我
朋友kent了他作为我和Sarah的间Adapter让我和Sarah可以相互交谈了(也不知道他会不会耍我)
适配器(变压器)模式:把个类接口变换成客户端所期待另种接口从而使原本因接口原因不匹配而无法起工作
两个类能够起工作适配类可以根据参数返还个合适例子给客户端
7、BRIDGE—早上碰到MM要说早上好晚上碰到MM要说晚上好;碰到MM穿了件新衣服要说你衣服好漂
亮哦碰到MM新做发型要说你头发好漂亮哦不要问我“早上碰到MM新做了个发型如何说”这种问题自己用
BRIDGE组合下不就行了
桥梁模式:将抽象化和实现化脱耦使得 2者可以独立变化也就是说将他们的间强关联变成弱关联也就是指
在个软件Software系统抽象化和实现化的间使用组合/聚合关系而不是继承关系从而使两者可以独立变化
8、COMPOSITE—Mary今天过生日“我过生日你要送我件礼物”“嗯好吧去商店你自己挑”“这件T恤挺
漂亮买这条裙子好看买这个包也不错买”“喂买了 3件了呀我只答应送件礼物哦”“什么呀T恤加裙子加包包正
好配成套呀小姐麻烦你包起来”“……”MM都会用Composite模式了你会了没有?
合成模式:合成模式将对象组织到树结构中可以用来描述整体和部分关系合成模式就是个处理对象树结构模
式合成模式把部分和整体关系用树结构表示出来合成模式使得客户端把个个单独成分对象和由他们复合而成合
成对象同等看待
9、DECORATOR—Mary过完轮到Sarly过生日还是不要叫她自己挑了不然这个月伙食费肯定玩完拿出我去
年在华山顶上照照片在背面写上“最好礼物就是爱你Fita”再到街上礼品店买了个像框(卖礼品MM也很漂亮哦
)再找隔壁搞美术设计Mike设计了个漂亮盒子装起来……我们都是Decorator最终都在修饰我这个人呀如何样看
懂了吗?
装饰模式:装饰模式以对客户端透明方式扩展对象功能是继承关系个替代方案提供比继承更多灵活性动态给
个对象增加功能这些功能可以再动态撤消增加由些基本功能排列组合而产生非常大量功能
10、FACADE—我有个专业Nikon相机我就喜欢自己手动调光圈、快门这样照出来照片才专业但MM可
不懂这些教了半天也不会幸好相机有Facade设计模式把相机调整到自动档只要对准目标按快门就行了切由相机
自动调整这样MM也可以用这个相机给我拍张照片了
门面模式:外部和个子系统通信必须通过个统门面对象进行门面模式提供个高层次接口使得子系统更易于使
用每个子系统只有个门面类而且此门面类只有个例子也就是说它是个单例模式但整个系统可以有多个门面类
11、FLYWEIGHT—每天跟MM发短信手指都累死了最近买了个新手机可以把些常用句子存在手机里要用
时候直接拿出来在前面加上MM名字就可以发送了再不用个字个字敲了共享句子就是FlyweightMM名字就是提
取出来外部特征根据上下文情况使用
享元模式:FLYWEIGHT在拳击比赛中指最轻量级享元模式以共享方式高效支持大量细粒度对象享元模式能
做到共享关键是区分内蕴状态和外蕴状态内蕴状态存储在享元内部不会随环境改变而有所区别外蕴状态是随环
境改变而改变外蕴状态不能影响内蕴状态它们是相互独立将可以共享状态和不可以共享状态从常规类中区分开
来将不可以共享状态从类里剔除出去客户端不可以直接创建被共享对象而应当使用个工厂对象负责创建被共享
对象享元模式大幅度降低内存中对象数量
12、PROXY—跟MM在网上聊天开头总是“hi,你好”,“你从哪儿来呀?”“你多大了?”“身高多少呀
?”这些话真烦人写个做为我Proxy吧凡是接收到这些话都设置好了自动回答接收到其他话时再通知我回答如何
样酷吧
代理模式:代理模式给某个对象提供个代理对象并由代理对象控制对源对象引用代理就是个人或个机构代
表另个人或者个机构采取行动某些情况下客户不想或者不能够直接引用个对象代理对象可以在客户和目标对象
直接起到中介作用客户端分辨不出代理主题对象和真实主题对象代理模式可以并不知道真正被代理对象而仅仅
持有个被代理对象接口这时候代理对象不能够创建被代理对象被代理对象必须有系统其他角色代为创建并传入
行为模式
13、CHAIN OF RESPONSIBLEITY—晚上去上英语课为了好开溜坐到了最后排哇前面坐了好几个漂亮
MM哎找张纸条写上“Hi,可以做我女朋友吗?如果不愿意请向前传”纸条就个接个传上去了糟糕传到第排
MM把纸条传给老师了听说是个老处女呀快跑!
责任链模式:在责任链模式中很多对象由每个对象对其下家引用而接
起来形成条链请求在这个链上传递直到链上某个对象决定处理此请求客户并不知道链上哪个对象最终处理
这个请求系统可以在不影响客户端情况下动态重新组织链和分配责任处理者有两个选择:承担责任或者把责任推
给下家个请求可以最终不被任何接收端对象所接受
14、COMMAND—俺有个MM家里管得特别严没法见面只好借助于她弟弟在我们俩的间传送信息她对我
有什么指示就写张纸条让她弟弟带给我这不她弟弟又传送过来个COMMAND为了感谢他我请他吃了碗杂酱面
哪知道他说:“我同时给我姐姐 3个男朋友送COMMAND就数你最小气才请我吃面”
命令模式:命令模式把个请求或者操作封装到个对象中命令模式把发出命令责任和执行命令责任分割开委派
给区别对象命令模式允许请求方和发送方独立开来使得请求方不必知道接收请求方接口更不必知道请求是如何
被接收以及操作是否执行何时被执行以及是如何被执行系统支持命令撤消
15、INTERPRETER—俺有个泡MM真经上面有各种泡MM攻略比如说去吃西餐步骤、去看电影思路方法
等等跟MM约会时只要做个Interpreter照着上面脚本执行就可以了
解释器模式:给定个语言后解释器模式可以定义出其文法种表示并同时提供个解释器客户端可以使用这个解
释器来解释这个语言中句子解释器模式将描述怎样在有了个简单文法后使用模式设计解释这些语句在解释器模
式里面提到语言是指任何解释器对象能够解释任何组合在解释器模式中需要定义个代表文法命令类等级结构也
就是系列组合规则每个命令对象都有个解释思路方法代表对命令对象解释命令对象等级结构中对象任何排列组
合都是个语言
16、ITERATOR—我爱上了Mary不顾切向她求婚
Mary:“想要我跟你结婚得答应我条件”
我:“什么条件我都答应你说吧”
Mary:“我看上了那个克拉钻石”
我:“我买我买还有吗?”
Mary:“我看上了湖边那栋别墅”
我:“我买我买还有吗?”
Mary:“我看上那辆法拉利跑车”
我脑袋嗡声坐在椅子上咬牙:“我买我买还有吗?”
……
迭代子模式:迭代子模式可以顺序访问个聚集中元素而不必暴露聚集内部表象多个对象聚在起形成总体称的
为聚集聚集对象是能够包容组对象容器对象迭代子模式将迭代逻辑封装到个独立子对象中从而和聚集本身隔开
迭代子模式简化了聚集界面每个聚集对象都可以有个或个以上迭代子对象每个迭代子迭代状态可以是彼此独立
迭代算法可以独立于聚集角色变化
17、MEDIATOR— 4个MM打麻将相互的间谁应该给谁多少钱算不清楚了幸亏当时我在旁边按照各自筹
码数算钱赚了钱从我这里拿赔了钱也付给我切就OK啦俺得到了 4个MM电话
调停者模式:调停者模式包装了系列对象相互作用方式使得这些对象不必相互明显作用从而使他们可以松散
偶合当某些对象的间作用发生改变时不会立即影响其他些对象的间作用保证这些作用可以彼此独立变化调停者
模式将多对多相互作用转化为对多相互作用调停者模式将对象行为和鞒橄蠡讯韵笤谛〕叨鹊男形嫌肫渌韵蟮南
嗷プ饔梅挚怼?BR>
18、MEMENTO—同时跟几个MM聊天时定要记清楚刚才跟MM说了些什么话不然MM发现了会不高兴哦
幸亏我有个备忘录刚才和哪个MM说了什么话我都拷贝份放到备忘录里面保存这样可以随时察看以前记录啦
备忘录模式:备忘录对象是个用来存储另外个对象内部状态快照对象备忘录模式用意是在不破坏封装条件下
将个对象状态捉住并外部化存储起来从而可以在将来合适时候把这个对象还原到存储起来状态
19、OBSERVER—想知道咱们公司最新MM情报吗?加入公司MM情报邮件组就行了tom负责搜集情报他
发现新情报不用个个通知我们直接发布给邮件组我们作为订阅者(观察者)就可以及时收到情报啦
观察者模式:观察者模式定义了种队多依赖关系让多个观察者对象同时监听某个主题对象这个主题对象在状
态上发生变化时会通知所有观察者对象使他们能够自动更新自己
20、STATE—跟MM交往时定要注意她状态哦在区别状态时她行为会有区别比如你约她今天晚上去看电影
对你没兴趣MM就会说“有事情啦”对你不讨厌但还没喜欢上MM就会说“好啊不过可以带上我同事么?”已
经喜欢上你MM就会说“几点钟?看完电影再去泡吧如何样?”当然你看电影过程中表现良好话也可以把
MM状态从不讨厌不喜欢变成喜欢哦
状态模式:状态模式允许个对象在其内部状态改变时候改变行为这个对象看上去象是改变了它类样状态模
式把所研究对象行为包装在区别状态对象里每个状态对象都属于个抽象状态类个子类状态模式意图是让个对象
在其内部状态改变时候其行为也随的改变状态模式需要对每个系统可能取得状态创立个状态类子类当系统状态
变化时系统便改变所选子类
21、STRATEGY—跟区别类型MM约会要用区别策略有请电影比较好有则去吃小吃效果不错有去海边浪漫
最合适单目都是为了得到MM芳心我追MM锦囊中有好多Strategy哦
策略模式:策略模式针对组算法将每个算法封装到具有共同接口独立类中从而使得它们可以相互替换策略模
式使得算法可以在不影响到客户端情况下发生变化策略模式把行为和环境分开环境类负责维持和查询行为类各
种算法在具体策略类中提供由于算法和环境独立开来算法增减修改都不会影响到环境和客户端
22、TEMPLATE METHOD——看过如何说服女生上床这部经典文章吗?女生从认识到上床不变步骤分为
巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去 8大步骤(Template method)但每个步骤针对区
别情况都有不样做法这就要看你随机应变啦(具体实现);
模板思路方法模式:模板思路方法模式准备个抽象类将部分逻辑以具体思路方法以及具体构造子形式实现然
后声明些抽象思路方法来迫使子类实现剩余逻辑区别子类可以以区别方式实现这些抽象思路方法从而对剩余逻
辑有区别实现先制定个顶级逻辑框架而将逻辑细节留给具体子类去实现
23、VISITOR—情人节到了要给每个MM送束鲜花和张卡片可是每个MM送花都要针对她个人特点每张卡
片也要根据个人特点来挑我个人哪搞得清楚还是找花店老板和礼品店老板做下Visitor让花店老板根据MM特点
选束花让礼品店老板也根据每个人特点选张卡这样就轻松多了;
访问者模式:访问者模式目是封装些施加于某种数据结构元素的上操作旦这些操作需要修改话接受这个操作
数据结构可以保持不变访问者模式适用于数据结构相对未定系统它把数据结构和作用于结构上操作的间耦合解
脱开使得操作集合可以相对自由演化访问者模式使得增加新操作变很容易就是增加个新访问者类访问者模式将
有关行为集中到个访问者对象中而不是分散到个个节点类中当使用访问者模式时要将尽可能多对象浏览逻辑放
在访问者类中而不是放到它子类中访问者模式可以跨过几个类等级结构访问属于区别等级结构成员类
原文:http://blog.csdn.net/wy634379160/article/details/43983469