美文网首页
设计模式

设计模式

作者: 开心一刻_ | 来源:发表于2018-10-18 20:54 被阅读0次

解释器模式

简介:
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示

享元模式

作用:

可以避免大量非常相似类的开销。
在程序设计的中,有时需要生成大量细粒度的类实例来表示数据。如果能发现实例除了几个参数外基本相同的,有时就能够受大幅度地减少需要实例化的类的数量。
如果能把这些参数移到类实例的外面,在方法调用时将他们传递进来,就可以通过共享大幅度的减少单个实例的数目。

使用场景:

比方说一个五子棋的项目,不能每一个棋子都创建一个对象,其实只需要一个五子棋对象就行了,他们之间相同的地方是颜色相同,所以颜色是享元对象的内部属性,外部属性是五子棋的坐标。

命令模式

UML类图 49D0BAFF-5B43-479C-852A-12849FC8AAF5.png

简介:

将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

总结:

将具体的命令创建一个类,这样在每次增加命令的时候,
都只需要增加一个新类就可以了。

桥接模式

优先使用对象合成/聚合,而不是类继承。

合成/聚合复用原则

好处:

有助于你保持每个类被封装,并被集中在单个任务上。
这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

04B811D4-386B-4DD1-88EE-EBAB17F21850.png

上面的这种方式不好扩展;
修改为下面的这种方式:


FA00EF1B-3E66-4B65-991C-C26F8911BF76.png

简介:

讲抽象部分与它的实现部分分离,使它们都可以独立地变化。
抽象与其派生类分离,并不是说,让抽象类与其派生类分离,因为这没有任何意义。
实现指的是抽象类和它的派生类用来实现自己的对象。
举例:手机既可以按照品牌分类,也可以按照功能分类。

迭代器模式

简介:

提供一个方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
迭代器的作用,就是可以用更多的方式来遍历乘客,而不是只需要一种方式。

应用场景:

当需要遍历一个集合对象的时候,创建一个迭代器类,用来左右前后反反复复的遍历这个集合对象。

UML类图

07575E82-64C4-4C36-95E0-36BECBBE4D58.png

iOS已经帮我们封装好了迭代器NSEnumerator

组合模式

89B6676E-0DC6-452B-BA0F-A9A00E59D562.png

有了组合模式可以少很多if else的判断逻辑在里面。

策略模式

策略模式定义了一系列算法的方法,才概念上来看,所有这些算法完成的是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。

应用场景:

需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化

与工厂类的区别:将创建工厂对象和调用工厂方法的逻辑封装在一个Context类中,和工厂方法结合起来使用

UML类图:


屏幕快照 2018-10-18 下午5.31.38.png

设计模式的基本原则:

  1. 单一职责原则
  2. 开发-封闭原则(面向扩展开发,面向改变封闭)
  3. 依赖倒转原则
    1)高层模块不应该依赖低层模块,两个都应该依赖抽象
    2)抽象不应该依赖细节,细节应该依赖抽象)
  4. 里氏代换原则
    子类类型可以替换调父类类型
  5. 迪米特法则

如果两个类,不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

装饰器模式

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰器模式比生成子类更为灵活。


屏幕快照 2018-10-18 下午5.42.36.png

代理模式

为其他对象提供一种代理以控制对这个对象的访问。
定义了RealSubject和Proxy的公共接口,这样就在任何使用RealSubject的地方都可以使用Proxy

代理的用法和原来类的用法相同,可以在代理模式下边封装自己想要的一些方法。

代理的作用:当调用真是对象时,代理处理另外一些事。
代理模式其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。


代理模式.png

工厂方法模式

简介:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

原型模式

从一个对象创建另一个可定制的对象。而且不需要知道任何创建的细节。

模版方法模式

当我们要完成某一个细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们考虑用模版方法模式来处理。

具体实现流程:

把不一样的地方,创建一个方法代替原来固定的值,然后子类中就可以重写这个方法来实现自己不同的逻辑。
模版方法模式简介:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
UML类图:


模版模式.png

列表相似度很高的时候,应用模版设计模式。

外观模式

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

使用场景:
  1. 当调用三方类库的时候,三层架构。层与层之间简历Facade
  2. 当新系统和老系统交互的时候,让新系统和Facade层交互,来提供粗糙或者高度复杂的遗留代码的比较清晰简单的接口。


    外观模式.png

建造者模式

将一个复杂对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示

观察者模式

定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个对象在状态发生变化时,会通知所有观察者对象,让他们能够自动更新自己。
使用场景:
当一个对象的改变需要同时改变其它对象的时候。

抽象工厂模式

状态模式

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

使用场景:
当控制一个对象状态转换的条件表达式过去复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以吧复杂的判断逻辑简化。

设计模式.png

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

网友评论

      本文标题:设计模式

      本文链接:https://www.haomeiwen.com/subject/iwsxsftx.html