zoukankan      html  css  js  c++  java
  • 公用技术——设计模式——初篇

      设计模式隶属于面向对象设计领域,是设计者们在日常工作中遇到的各种困难以及解决方案的汇总。

    1、知识体系

    1.1 创建型模式

    创建型模式主要的功能就是创建和复用对象。总共有5种类型,每种类型面对的问题是不同的。

    1. 单例模式:确保在一个JVM中只存在一个对象实例。
    2. 工厂模式:通过提供额外的工厂类,”封装”了复杂的类体系结构,简化了框架的使用。它有两种模式,工厂方法和抽象工厂。。
    3. 构建者模式:通过提供额外的构建者类,”封装”了复杂的类创建过程。
    4. 原型模式: 通过prototype原型链对象创建新对象,达到复用公共属性和方法的目的

    1.2 结构性模式

      结构型模式主要的功能是通过添加额外的类来满足新的功能要求。掌握新增类的职责,理解需求是掌握它们的关键。

    1. 桥接模式:桥接模式是将抽象与其具体实现进行解耦。
    2. 适配器模式:通过提供额外的适配器类,解决新接口对旧接口的兼容性问题。解决不同厂商之间接口无法协同的问题。
    3. 组合模式:组合模式是为了在某些业务场景下无区别对待容器类和单个类。
    4. 装饰器模式:在不修改原类的情况下,通过添加新的装饰器类,对原有功能进行扩展。
    5. 享元模式:在大量创建相似对象时,将对象的”common state”或”share state”与”internal state”或”special state”分离。将common state封装为一个对象,并共享给所有对象,以此达到节约内存的目的。
    6. 代理模式:将调用类方法的操作转换为调用代理类的方法。

     1.3 行为型模式

      行为型模型大部分模拟生活中的应用场景,理解思想,角色,角色之间的关系,角色之间的行为是掌握它们的关键。较为典型的几种思想,"duck-typing","整合",“解耦”。

    1. 迭代器模式:是”duck-typing”的一种应用场景,核心思想是忽略其类型和数据结构,抽象它们的公共行为。迭代器模式忽略集合类的类型和数据结构,抽象它们的遍历行为,并将遍历的职责委托给迭代器类(Iterator)
    2. 策略模式:为了实现相同的功能,提出了不同的算法,策略模式的目的是用户可以动态的在这些算法中来回切换。
    3. 职责链模式:是为了高效,合理的处理请求。为高效制定规范的流程,为合理,设置过滤器,拦截器,权限等等限制措施
    4. 备忘录模式:记录对象的历史状态,这样做的目的是对象可以回滚到之前的历史状态。
    5. 门面模式:为了系统的易用性,提供一个统一的接口整合所有子系统的功能。
    6. 模板模式:规范定义流程,并将公共流程和独立流程分离,在父类中实现公共流程,在具体的子类中实现独立流程,不同的子类提供各自独立流程的实现方式。
    7. 命令模式:为了将请求发起者和请求处理者解耦,从而提高请求的处理效率。
    8. 状态模式:基于对象状态的改变,其行为也发生改变。模式本身的类结构并不是很复杂,难点在于对类的认知。
    9. 观察者模式:将subject的动态通知给Observer。在程序上动态体现为内部状态的改变,即某个属性值发生改变。
    10. 访问者模式:在不修改原始类结构的基础上,将原始类的某种功能委托给访问者类来实现
    11. 中介者模式:解耦不同对象之间的交互,提供统一的中介者来负责对象之间的交互。
    12. 解释器模式:将一种语法转换为另外一种语法,并提供相应的转换规则和解释器。

    2、工具

    • StartUML:很方便的,很容易上手的一个画UML图的工具,官网下载的话如果速度较慢,使用FQ软件,没有FQ软件的话,搜索各种云盘估计也会有。
    • RationalRose:IBM出品,大厂出品,必属精品,需要破解。个人建议FQ,国内的下载懂的都懂。2003版安装教程:https://www.jianshu.com/p/7e667861dd78

    3、参考资料

    • oodesign:http://www.oodesign.com/
    • 书籍《Java Design Pattern》
    • 书籍《Head First Design Pattern》
    • 书籍《Design Patterns: Elements of Reusable Object-Oriented Software》
  • 相关阅读:
    计算机图形学和OpenGL(二)坐标系和绘制点线函数
    计算机图形学和OpenGL(一)OpenGL初步
    C++ 实现链表常用功能
    Cocos2d-x环境搭建
    2014年学习计划
    2013年终总结
    AS3开发必须掌握的内容
    starling性能优化
    后补个2012年的总结吧
    原生javascript实现图片懒加载
  • 原文地址:https://www.cnblogs.com/rain144576/p/12330124.html
Copyright © 2011-2022 走看看