设计模式概述

设计模式概述

本文由 @lonelyrains出品,文章链接: http://blog.csdn.net/lonelyrains/article/details/51089534

  • 那么多所谓的设计模式,为什么老是记不住?
  • 为什么面试的时候总是回答不上来?
  • 其实本来很简单的内容,为什么很难在实际项目中使用?

面试的时候,考察设计模式,就像是“天王盖地虎,宝塔镇河妖”一样的黑话。在道上混,虽然不知道会碰到什么鬼神,知道内涵意义的同时,也需要知道这些形式上的东西到底是怎么一一表述的。不然,咋死的都不知道~

  • 设计模式的性质 
    • 都是一些特定使用场景的固定章法
  • 设计模式的实现 
    • 都是加抽象层
  • 设计模式的目的 
    • 都是解耦
    • 评价是否是过度设计:被解耦的部分是否确实可能频繁变化

对一些常用的设计模式套用上面的描述结构:

创建型

工厂模式(Factory)

  • 性质 
    • 创建型场景的固定章法。
  • 实现 
    • 创建对象时加一层抽象,相对于直接调用创建指定对象的代码而言。
    • 所有的创建都被封装在一种叫指定对象工厂的代码里。
  • 目的 
    • 针对的是解耦一种类型的特定对象创建。创建特定对象的代码可能会频繁变化。

抽象工厂(Abstract Factory)

  • 性质 
    • 创建型场景的固定章法。
  • 实现 
    • 创建对象时加一层抽象,相对于直接调用创建指定对象的工厂方法而言。
    • 所有的创建都被封装在一种叫抽象对象工厂的代码里。
  • 目的 
    • 针对的是解耦特定类型的对象创建。创建对象的类型可能频繁变化。

结构型

桥接(Bridge)

  • 性质 
    • 结构型场景的固定章法。结构型是经常需要重构的部分。
  • 实现 
    • 接口和实现加一层抽象,相对于直接调用特定功能实现。
    • 所有的特定功能实现都被封装在一种叫特定实现接口的代码里。
    • 其实将实现当做特定对象的话,桥接就跟工厂模式没什么区别。工厂这时候就是接口。
  • 目的 
    • 针对的是解耦特定类型的功能调用。实现特定类型功能的方法可能频繁变化。
  • 思考 
    • 为什么没有对应的抽象桥接模式?因为抽象桥接如果存在,需要解耦的部分就是特定类型的功能接口。也就是说在调用这个类时,不知道需要调用其中的什么方法。这种使用场景虽然不是没有,但是极其少见,所以没有这个提法而已。其他设计模式为什么没有对应的抽象XXX设计模式,也是因为这个原因。“抽象”两个字就像是运算符,本可以无限往上叠加。比如,抽象抽象工厂模式是不是可以存在呢?因为没有解耦的实际意义,所以并不存在实用价值。

装饰模式(Decorator)

  • 性质 
    • 结构型场景的固定章法。
  • 实现 
    • 调用特定对象的功能组合时,加多一层抽象,相对于直接定义并调用多变功能的子类对象而言。
  • 目的 
    • 将额外功能可以通过不同子类组合起来,而不是笨拙地拼接定义新子类。功能定制更加灵活。

行为型

模板方法(TemplateMethod)

  • 性质 
    • 行为型场景的固定章法。
  • 实现 
    • 增加一层调用算法流程的骨架,在父类中定义好。注意这个骨架是不变的部分。各种子类实现里实现这个算法流程骨架函数里的具体调用子函数。可想而知,这个通用算法流程骨架函数通常不需要是虚函数,而子函数需要。
  • 目的 
    • 仅仅是为了减少骨架方法每个子类都实现一遍的重复劳动,没啥玄乎的。

观察者模式(Observer)

  • 性质 
    • 行为型场景的固定章法。
  • 实现 
    • 通过增加定义一层抽象观察者类,在需要观察的类结构里增加一层消息通知的机制。对所有需要对此类对象状态变化产生行为的各种观察者进行统一通知。
  • 目的 
    • 实现统一通知,解耦的是各种自定义类、五花八门的通知方式。

总结

本文通过对创建、结构、行为型三种设计模式中分别提取两种典型的设计模式加以探讨,得出一个基本的设计模式的理解骨架——即从性质(使用场景)、实现(如何解耦)、目的(解耦什么)三方面考察,然后附加一点自己的思考。

这个总结本身也是一种抽象。理解有偏差的地方,或者有不同的声音,欢迎一起探讨或者指正。

展开阅读全文

设计模式概述和分类

07-05

1) 优秀的程序应该是这样的:阅读时,感觉很优雅;新增功能时,感觉很轻松;运行时,感觉很快速,这就需要设计模式支撑。<br />rn<br />rn2) 设计模式包含了大量的编程思想,讲授和真正掌握并不容易,网上的设计模式课程不少,大多讲解的比较晦涩,没有真实的应用场景和框架源码支撑,学习后,只知其形,不知其神。就会造成这样结果: 知道各种设计模式,但是不知道怎么使用到真实项目。本课程针对上述问题,有针对性的进行了升级 (1) 授课方式采用 图解+框架源码分析的方式,让课程生动有趣好理解 (2) 系统全面的讲解了设计模式,包括 设计模式七大原则、UML类图-类的六大关系、23种设计模式及其分类,比如 单例模式的8种实现方式、工厂模式的3种实现方式、适配器模式的3种实现、代理模式的3种方式、深拷贝等<br />rn<br />rn3) 如果你想写出规范、漂亮的程序,就花时间来学习下设计模式吧<br />rn<br />rn课程内容和目标<br />rn<br />rn本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式<br />rn<br />rn1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种实现)、抽象工厂模式、原型模式、建造者模式、工厂模式。结构型模式:适配器模式(3种实现)、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式(3种实现)。行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)<br />rn<br />rn2) 学习目标:通过学习,学员能掌握主流设计模式,规范编程风格,提高优化程序结构和效率的能力。<br />rn<div>rn <br />rn</div>

没有更多推荐了,返回首页