设计模式 理解总结

设计模式解决问题步骤

1、寻找合适的对象(合适的分治、拆分)

面向对象设计最困难的部分是将系统分解成对象集合。因为要考虑许多因素:封装、粒度、依赖关系、灵活性、性能、演化、复用等。(面向对象、面向接口编程、函数式编程的闭包,本质都是拆分,只是拆分的依据不一样)

2、决定对象的粒度

对象在大小和数目上变化极大。它们能标识下自硬件、上自整个应用的任何事物。


创建型

简单工厂模式:工厂类统一向外部提供创造方法,具体类都实现接口函数。

好处:1.良好的封装性,只要传进具体类名就可以了,不用知道具体的实现,降低耦合。

2.扩展性非常好,只要稍微修改工厂类或扩展工厂类,然后增加实现类就可以了。

只依赖提供的接口,实现解耦;使用子类替换父类,扩展性良好。

抽象工厂模式:把工厂类再抽象一次,向外提供的工厂类更加具体一些。

好处,可以解决更加复杂的业务逻辑,向外统一提供接口。

但是坏处是很多,因为互相依赖变多了,要扩展的难度比较大,涉及修改的类比较多。

模板方法模式:在父类中统一实现子类都相同的方法。

可以理解为在简单工程模式的基础上,各个具体类都有同一个方法而且实现都一样(处理逻辑都相同)。我们可以把这些相同的方法都在父类(工厂类)中实现。

好处:可以扩展的时候更加方便快捷,便于维护。

建造者模式:把建造方法都抽离出来,重复使用。

可以理解为在简单工厂创建很多同种具体类的时候,需要重复创建东西传进去,这个时候把创造方法抽离,每次只需要传数据进去就可以了。

好处:封装良好,不用关注建造细节;扩展性很好,各种具体类的建造是相互独立的。

原型模式:每个对象实现接口的个性化数据,共同的数据和方法抽离出来。

调用者用个性化数据替换占位符,其他的拷贝即可。当然实现的时候,可以根据实际情况选择是否需要深拷贝。

跟装饰模式很像。强调点不一样而已。

结构型

享元模式:对于不变的对象,可以放在一个对象池中,大家都使用即可,不用重复创建。(26个英文字符)

好处:小而多的对象可以节省不少空间。

组合模式

通过创建几个组件对象,调用组合他们的方法,实现一个新的对象。

外观模式

外观类可以调用组合方法,向外提供一个统一的接口。

桥接模式:(看黑皮的设计模式、RN的总结)

在策略模式的基础上,增加一层来实现A对B的调用组合,从而形成一组新的接口。

A接口的粒度较大,B接口的粒度较细,从而保证B已经实现的类不用改动,扩展的话只要实现新的即可。(A、B两侧变动,互不影响)

最好的例子就是OC和JS交互的模式、socket编程。

代理模式:把事情让代理去做,需要个性化的数据或逻辑的时候回调委托者提供的方法。

把相同的事情都统一抽离出来做成专业处理服务,大家都可以去委托它。

好处:1.封装良好,代理专注于提供某一种服务。

2.扩展性好,代理是可以嵌套代理的。

3.面向切面编程,实现AOP。

动态代理模式:把个性化定制的填空题变成选择题。类似于策略模式。

把需要个性化的定制的回调方法封装成几种情况(工厂模式),然后根据情况使用不用的定制化服务。

适配器模式

就是代理模式中使用到的接口。根据接口或者运输载体,按照格式提供数据。

装饰模式

入参是一个被创建的对象,这个对象实现了协议。类似于策略模式。跟代理模式只是方法的持有者不一样。

可以组装成具有不同特点的对象。

行为型

责任链模式:处理类根据请求类的level,在映射表中选择不同的处理类来处理,如果处理不了就交给更高级level的来处理。

责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,而是把责任推给下家

好处:把请求和处理分开,解耦。

坏处:每个请求都要走一个请求链,可能性能有问题。

实现共有的代码块,特定的地方留下钩子。

可应用于自动化的个人投诉情况、DNS解析、事件响应链。

策略模式http://blog.csdn.net/ydxlt/article/details/50434341

每个策略按照接口来自己实现,策略调用者随意创建一个策略执行接口函数就可以得到策略。

(从tableView的角度看VC来实现回调函数)

状态模式http://blog.csdn.net/ydxlt/article/details/50441215

每个状态对象根据接口实现自己的方法,状态机根据现有状态创建一个状态对象执行接口函数,指针持有下个状态的状态对象。

(给策略模式加上状态机)

解释器模式http://blog.csdn.net/ydxlt/article/details/50497909

等同于状态机

命令模式:把实现类通过不同的组合封装成命令类,然后通过操作Manager类选择执行不同的命令。(无接受者,等同策略)

好处:可以解耦,扩展性好,与模板方法模式结合可以减少子类膨胀的问题。

坏处:当命令的组合情况很多的时候,命令会异常庞大。

可以用于压缩文件的算法选择

中介者模式==MVC,其中的C就是中介着的角色。

MVC:C冲动V和M的中介,为它们直接的联系提供逻辑处理。

门面模式:制定流程类,通过给Manager类填入每个环境的数据,然后执行这个流程。跟函数是类是的。

可应用于计算工资。

观察者模式

中介着模式就是固定对象的观察者模式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,922评论 1 15
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    RamboLI阅读 748评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 3,777评论 3 14
  • 十一长假,好多人都出去玩了。我们寝室约会的,回家的,回对象家的。母上大人召唤我和她一起去旅游。【我才不承认我非要去...
    静静手绘阅读 125评论 4 1