设计模式 理解总结

设计模式解决问题步骤

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类填入每个环境的数据,然后执行这个流程。跟函数是类是的。

可应用于计算工资。

观察者模式

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

    原文作者:笔寂晓才
    原文地址: https://www.jianshu.com/p/7dc9107d10d3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞