该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/128 访问。
本套设计模式教程已全部开源,地址:https://github.com/byteflying/DesignPattern
设计模式概述
20世纪80年代,四人组(Gang of Four or GoF)将常用的23种软件设计模式进行了归纳整理,自此标志着软件设计模式的正式诞生。它旨在用“模式”来统一和沟通面向对象思想在分析、设计和解决问题之间的鸿沟。在未来的几十年里,它被证明是行之有效的软件开发准则,是通向软件架构师的必经之路,是软件开发领域的“葵花宝典”。
设计模式是一套被反复使用的、经过合理分类的、用于提高开发效率的设计经验的总结。本系列文章将以C#语言来系统的介绍这23种常用的设计模式。为了照顾之前没有接触过设计模式的同学,我将以一种“循序渐进的引导式方法”,来为大家阐述每一种设计模式的产生背景、优缺点及其适用场景。
面向对象设计原则(Object Oriented Design Principle or OODP)
面向对象设计的基本原则,它们就像面向对象程序设计中的金科玉律,遵守它们可以使我们的代码更加鲜活、易于复用、易于拓展、灵活优雅。不同的设计模式对应不同的需求,而设计原则则代表永恒的灵魂,需要在实践中时时刻刻地遵守。就如ARTHUR J.RIEL在那边《OOD启示录》中所说的:“你并不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看做警铃,若违背了其中的一条,那么警铃就会响起。”
面向对象设计原则之1-单一职责原则(Single Responsibility Principle or SRP)
面向对象设计原则之2-开放闭合原则(Open-Closed Principle or OCP)
面向对象设计原则之3-里氏替换原则(Liskov Substitution Principle or LSP)
面向对象设计原则之4-依赖倒置原则(Dependence Inversion Principle or DIP)
面向对象设计原则之5-接口隔离原则(Interface Segregation Principle or ISP)
面向对象设计原则之6-合成复用原则(Composite Reuse Principle or CRP)
面向对象设计原则之7-迪米特法则(Law of Demeter or LoD)
通用职责分配软件原则(General Responsibility Assignment Software Principle or GRASP)
通用职责分配软件原则主要是解决哪些功能职责放哪些类实现的问题,是讨论功能分配的问题,它介于分析和设计之间,是在类被识别之后,如何向类分配职责的的基本原则。通常在进行用例分析和设计时,以及后面的实现类设计时,应用GRASP原则来确定类在协作中所承担的职责,这些职责主要包括:1. 谁拥有信息?掌握或通过计算引申得到的某些信息,以及相关的其他对象;2. 做什么?自己做或者触发其他对象做某些事,以及控制或协调其他对象做某些事。然后根据这些信息以及相关的原则来分配职责。
通用职责分配软件原则之1-信息专家原则(Information Expert Principle)
通用职责分配软件原则之2-创造者原则(Creator Principle)
通用职责分配软件原则之3-低耦合原则(Low Coupling Principle)
通用职责分配软件原则之4-高内聚原则(High Cohesion Principle)
通用职责分配软件原则之5-控制器原则(Controller Principle)
通用职责分配软件原则之6-多态原则(Polymorphism Principle)
通用职责分配软件原则之7-纯虚构原则(Pure Fabrication Principle)
通用职责分配软件原则之8-中介原则(Indirection Principle)
通用职责分配软件原则之9-受保护变量原则(Protected Variations Principle)
创建型模式(Creational Pattern )
创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。
创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。
C#设计模式之0-简单工厂模式(Simple Factory Pattern)
C#设计模式之1-工厂方法模式(Factory Method Pattern)
C#设计模式之2-抽象工厂模式(Abstract Factory Pattern)
C#设计模式之3-建造者模式(Builder Pattern)
C#设计模式之4-原型模式(Prototype Pattern)
C#设计模式之5-单例模式(Singleton Pattern)
结构型模式(Structural Pattern)
描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。结构型模式可以分为类结构型模式和对象结构型模式。
类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。 对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。
C#设计模式之6-适配器模式(Adapter Pattern)
C#设计模式之7-桥接模式(Bridge Pattern)
C#设计模式之8-组合模式(Composite Pattern)
C#设计模式之9-装饰者模式(Decorator Pattern)
C#设计模式之10-外观模式(Facade Pattern)
C#设计模式之11-享元模式(Flyweight Pattern)
C#设计模式之12-代理模式(Proxy Pattern)
行为型模式(Behavioral Pattern)
行为型模式是对在不同的对象之间划分责任和算法的抽象化。它不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。行为型模式分为类行为型模式和对象行为型模式两种。
类的行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。对象的行为型模式则使用对象的聚合关联关系来分配行为,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。
C#设计模式之13-职责链模式(Chain of Responsibility Pattern)
C#设计模式之14-命令模式(Command Pattern)
C#设计模式之15-解释器模式(Interpreter Pattern)
C#设计模式之16-迭代器模式(Iterator Pattern)
C#设计模式之17-中介者模式(Mediator Pattern)
C#设计模式之18-备忘录模式(Memento Pattern)
C#设计模式之19-观察者模式(Observer Pattern)
C#设计模式之20-状态模式(State Pattern)
C#设计模式之21-策略模式(Stragety Pattern)
C#设计模式之22-模板方法模式(Template Method Pattern)
C#设计模式之23-访问者模式(Vistor Pattern)
本文中部分介绍摘自百度百科
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/128 访问。