























前段时间,跟着Gang of Four学习了设计模式,虽然23种设计模式都过了一遍,好像懂了但是好像又有些不明白。刚好在软考备考时设计模式也是考点。故此,通过这一次的再复习索性整理出设计模式的一套学习笔记,笔记中会通过生活中的例子详细讲解各种常用模式,并利用Java代码实现。
本文主要通过以下几点来对设计模式进行总结:
设计模式这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。
直到1990年,软件工程界才开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。
在 1994年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合作出版了《设计模式:可复用面向对象软件的基础》(Design Patterns - Elements of Reusable Object-Oriented Software) 一书,该书首次提到了软件开发中设计模式的概念,并收录了23种设计模式。
首先初次接触设计模式的同学一定要牢记
设计模式不是某种语言,不是某种框架,更不是什么架构模式,它只是前辈们爬了无数坑、秃了头总结出来的代码设计经验!!!
其概念如下:
软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。
简单概括可得出如下要点:
根据各个模式的作用和目的可划分为
创建型模式、结构型模式和行为型模式3 种。
| 模式类型 | 模式 |
|---|---|
创建型模式(5)对象怎么来:用于创建对象 |
● 工厂模式(Factory Pattern) ● 抽象工厂模式(Abstract Factory Pattern) ● 单例模式(Singleton Pattern) ● 建造者模式(Builder Pattern) ● 原型模式(Prototype Pattern) |
结构型模式(7)对象和谁有关:用于处理类或对象的组合 |
● 适配器模式(Adapter Pattern) ● 桥接模式(Bridge Pattern) ● xxx过滤器模式(Filter、Criteria Pattern) ● 组合模式(Composite Pattern) ● 装饰器模式(Decorator Pattern) ● 外观模式(Facade Pattern) ● 享元模式(Flyweight Pattern) ● 代理模式(Proxy Pattern) |
行为型模式(11)对象与对象在干嘛:用于描述类、对象相互交互的责任分配 |
● 责任链模式(Chain of Responsibility Pattern) ● 命令模式(Command Pattern) ● 解释器模式(Interpreter Pattern) ● 迭代器模式(Iterator Pattern) ● 中介者模式(Mediator Pattern) ● 备忘录模式(Memento Pattern) ● 观察者模式(Observer Pattern) ● 状态模式(State Pattern) ● xxx空对象模式(Null Object Pattern) ● 策略模式(Strategy Pattern) ● 模板模式(Template Pattern) ● 访问者模式(Visitor Pattern) |
根据模式的操作对象来分(类或对象),可分为
类模式和对象模式2种。
你可能没有听过设计模式的原则,但是想必你一定知道面向对象设计的原则。如果都是第一次听说,那么接着往下看
在设计模式中,所有的模式都是基于这些设计原则来解决问题
程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果一个类因其他变化的原因只有一个职责。多个职责会引起耦合,牵一发动全身,此原则的核心是解耦和增强内聚性。子类可以当作父类用,并拥有自身独有的行为优于单个重度耦合接口,降低依赖,降低耦合防止过度耦合而不是使用继承。软件设计模式使人们可以更加简单方便地复用成功的设计和体系结构,它通常包含以下几个基本要素:
模式名称、别名、动机、问题、解决方案、效果、结构、模式角色、合作关系、实现方法、适用性、已知应用、例程、模式扩展和相关模式等
其中最关键的元素包括以下 4 个主要部分。
本文是根据
Gang of Four书中的23中设计模式展开讨论的,实际上,经过了近25年的发展,设计模式已经不仅仅局限于这23种。
设计模式是前辈们总结的优秀代码设计经验,是无法依次完全掌握的,其中很多都是需要结合实际场景的,需要我们先学习这种思想,学习前辈们优秀的案例,逐渐培养自己对代码的思维模式,当你遇到相应的场景时,能够知道通过何种设计模式进行优化,通过这种理解加应用的过程,就是对设计模式的逐渐掌握。
学习新知识都是需要循序渐进,当你了解了这23种典型的设计模式,并对它有一定理解后,相信无论是在日常开发,还是CodeReview时都可以设计和写出优秀的代码。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。