设计模式分组

GoF设计模式著作中的23种设计模式分为3组:创建型(Creational)、结构型(Structural)和行为型(Behavional)。

创建型

创建型处理对象构造和引用。它们将对象实例的实例化责任从任何客户代码中抽象出来,从而让代码保持松散耦合,将创建负责对象的责任放到一个地方,这遵循了单一职责原则和分离关注点原则。

下面是“创建型”分组中的模式。

  • Abstract Factory(抽象工厂)模式:提供一个接口来创建一组相关的对象。
  • Factory Method(工厂方法)模式:支持使用一个类来委托创建有效对象的责任。
  • Builder(生成器)模式:将对象本身的构造分离出来,从而能够创建对象的不同版本。``
  • Prototype(原型)模式:能够从一个原型实例来复制或克隆类,而不是创建新实例。
  • Singleton(单例)模式:支持一个类只能实例化一次,并且只有一个可用来访问它的全局访问点。

结构型

结构型模式处理对象的组合与关系,以满足大型系统的需要。

下面是“创建型”分组中的模式。

  • Adapter(适配器)模式:使不兼容接口的类能够一起使用。
  • Bridge(桥接)模式:将抽象与其实现分离,允许实现和抽象彼此独立地改变。
  • Composite(组合)模式:可以像对待对象的单个实例那样来对待一组表示层次结构的对象。
  • Decorator(装饰器)模式:能够动态包装一个类并扩展其行为。
  • Facade(门面)模式:提供一个简单的接口并控制对一组复杂接口和子系统的访问。
  • Flyweight(享元)模式:提供一种在许多小类之间高效共享数据的方式。
  • Proxy(代理)模式:为一个实例化成本很高的更复杂的类提供一个占位符。

行为型

行为型模式处理对象之间在责任和算法方面的通信。这个分组中的模式将复杂行为封装起来并将其从系统控制流程中抽象出来,这样就是复杂系统更容易理解和维护。

下面是下“行为型”分组中的模式。

  • Chain of Responsibility(责任链)模式:允许将命令动态链接起来处理请求。
  • Command(命令)模式:将一个方法封装成一个对象,并将该命令的执行与它的调用者分离。
  • Interpreter(解释器)模式:指定如何执行某种语言中的语句。
  • Iterator(迭代器)模式:提供以形式化的方式来导航集合的方法。
  • Midiator(中介者)模式:定义一个对象,可以让其它两个对象进行通信而不必让它们知道彼此。
  • Memento(备忘录)模式:允许将对象恢复到以前的状态。
  • Observer(观察者)模式:定义一个或多个类在另一个类发生变化时接到报警。
  • State(状态)模式:允许对象通过委托给独立的、可改变的状态对象来改变自己的行为。
  • Strategy(策略)模式:能够将算法封装到一个类中并在运行时转换,以改变对象的行为。
  • Template Method(模板方法)模式:定义算法流程控制,但允许子类重写或实现执行步骤。
  • Visitor(访问者)模式:能够在类上执行新的功能而不影响类的结构。

各种设计模式意图、UML图、代码实现后续~~~

.NET Design Patterns的更多相关文章

  1. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  2. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】

    原文链接: http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part-2-singleton/ De ...

  3. Head First Design Patterns

    From Head First Design Patterns. Design Principle: Idnetify the aspects of your application that var ...

  4. Apex Design Patterns

    Apex allows you to build just about any custom solution on the Force.com platform. But what are the ...

  5. [Design Patterns] 4. Creation Pattern

    设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性.它是代码编制真正实现工程化. 四个关键元素 ...

  6. [Design Patterns] 3. Software Pattern Overview

    When you're on the way which is unknown and dangerous, just follow your mind and steer the boat. 软件模 ...

  7. [Design Patterns] 1. Primary concept & term - UML

    It's time to review design patterns, especially when I reach the turning-point of my career. That's ...

  8. 设计模式(Design Patterns)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  9. Learning JavaScript Design Patterns The Observer Pattern

    The Observer Pattern The Observer is a design pattern where an object (known as a subject) maintains ...

  10. Learning JavaScript Design Patterns The Module Pattern

    The Module Pattern Modules Modules are an integral piece of any robust application's architecture an ...

随机推荐

  1. 【MCU】移植AT32库&FreeRTOS教程

    目录 前言 1. 移植AT库 1.1 移植内核相关文件 1.2 移植芯片型号相关文件 1.3 移植芯片外设驱动库 1.4 移植配置文件及中断回调函数文件 2. 移植FreeRTOS源码 2.1 获取 ...

  2. Java例题_30 在已经排好序的数组中插入值

    1 /*30 [程序 30 插入数字] 2 题目:有一个已经排好序的数组.现输入一个数,要求按原来的规律将它插入数组中. 3 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插 ...

  3. MongoDB中“$”操作符表达式汇总

    MongoDB中"$"操作符表达式汇总 查询 比较操作 $eq 语法:{ : { $eq: } } 释义:匹配等于(=)指定值的文档 举例: 查询age = 20的文档: db.p ...

  4. istio服务条目(ServiceEntry)介绍

    使用服务条目资源(ServiceEntry)可以将条目添加到 Istio 内部维护的服务注册表中.添加服务条目后,Envoy 代理可以将流量发送到该服务,就好像该服务条目是网格中的服务一样.通过配置服 ...

  5. 给Nginx配置日志格式和调整日期格式

    效果对比 官方默认日志格式 # 官方默认日志格式 log_format main '$server_name $remote_addr - $remote_user [$time_local] &qu ...

  6. istio:在vs中实现ab测试和路径切割

    此篇内容 主要目的是总结vs中的match的有关规则和在istio中如何实现路径切割(当下版本1.8.2) 实验demo main.go package main import ( "git ...

  7. 利用Vue实现一个简单的购物车功能

    开始学习Vue的小白,dalao多多指正 想要实现下面这个界面,包含总价计算.数量增加和移除功能 话不多说代码如下 <!DOCTYPE html> <html> <hea ...

  8. SVN讲解

    1.SVN是什么? 代码版本管理工具 它能记住你每次的修改 查看所有的修改记录 恢复到任何历史版本 恢复到已经删除的文件 2.SVN和Git相比,有什么优势? 使用简单,上手快 git没有目录级权限控 ...

  9. 结对作业-stage_1

    教学班 罗杰.任建班周五3.4节 gitlab项目地址 Here it is. 成员 周远航(3004) 李辰洋(3477) 结对编程体验 感受 在前期设计时,两人合作可以收集更多资料,提供更多想法, ...

  10. Kafka和Stream架构的使用

    Kafka的单节点运行 启动服务 Kafka 使用 ZooKeeper 如果你还没有 ZooKeeper 服务器,你需要先启动一个 ZooKeeper 服务器. 您可以通过与 kafka 打包在一起的 ...