什麽是設計模式??

软件设计中常见问题的典型解决方案。

能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题。

模式并不是一段特定的代码, 而是解决特定问题的一般性概念。 你可以根据模式来实现符合自己程序实际所需的解决方案。

模式包含什麽

  • 意图部分简单描述问题和解决方案。
  • 动机部分将进一步解释问题并说明模式会如何提供解决方案。
  • 结构部分展示模式的每个部分和它们之间的关系。

模式的分類:

创建型模式提供创建对象的机制, 增加已有代码的灵活性和可复用性。

结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。

行为模式负责对象间的高效沟通和职责委派。

大概的概念

单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。

原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。

工厂方法(Factory Method)模式:定义一个用于创建产品的接口,由子类决定生产什么产品。

抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。

建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。

代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。

适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

桥接(Bridge)模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

装饰(Decorator)模式:动态的给对象增加一些职责,即增加其额外的功能。

外观(Facade)模式:为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。

享元(Flyweight)模式:运用共享技术来有效地支持大量细粒度对象的复用。

组合(Composite)模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。

模板方法(TemplateMethod)模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。

命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。

职责链(Chain of Responsibility)模式:把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。

状态(State)模式:允许一个对象在其内部状态发生改变时改变其行为能力。

观察者(Observer)模式:多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。

中介者(Mediator)模式:定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。

迭代器(Iterator)模式:提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。

访问者(Visitor)模式:在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。

备忘录(Memento)模式:在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。

解释器(Interpreter)模式:提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。

最新文章

  1. Security7:View Usage
  2. php查看网页源代码的方法
  3. replaceWith() 和 replaceAll() 方法替换元素节点
  4. MinGW平台 openjpeg-2.1.0 静态编译后未定义引用的解决方法
  5. 输入文本框,当点击enter时,做进一步处理!
  6. Zabbix探索:Proxy没有回传任何数据
  7. PAT (Advanced Level) 1008. Elevator (20)
  8. 百度网盘免费扩容 免费扩容到2048G
  9. Java多线程学习之wait、notify/notifyAll 详解
  10. css条纹背景
  11. jquery序列化serialize()方法空格变为+问题解决参考方法
  12. html5页面拨打电话实现的方法
  13. /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  14. 自定义MVC框架之工具类-图像处理类
  15. Route Between Two Nodes in Graph
  16. information_schema系列六(索引,表空间,权限,约束相关表)
  17. MAC配置Xcode的Cocos2d-x环境
  18. python接口测试中安装whl格式的requests第三方模块
  19. find 下参数的关系默认是and 一个参数多个选项可以用 -or
  20. poj1039 Pipe【计算几何】

热门文章

  1. 深入剖析CVE-2021-40444-Cabless利用链
  2. 安装CentOS7出现dracut:/#……time解决办法
  3. Linux:査看文件的详细信息
  4. 【C#版本】微信公众号模板消息对接(一)(图文详解)
  5. Ansible安装及初始化-从零到无
  6. oj教程--链表
  7. java内存区域模型和详解
  8. LeetCode-040-组合总和 II
  9. 第五篇- 抖音的强大对手来了,用Flutter手撸一个抖音国际版,看看有多炫
  10. ASP.NET Core 6框架揭秘实例演示[19]:数据加解密与哈希