设计模式(Design pattern)概述

设计模式(Design
pattern)
是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结, 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性

设计框架

可复用面向对象软件系统一般划分为两大类:应用程序工具箱和框架(Framework)

我们平时开发的具体软件都是应用程序

而框架是构成一类特定软件可复用设计的一组相互协作的类

框架通常定义了应用体系的整体结构类和对象的关系等等设计参数,以便于具体应用实现者能集中精力于应用本身的特定细节。

框架主要记录软件应用中共同的设计决策,框架强调设计复用,因此框架设计中必然要使用设计模式。

另外,设计模式有助于对框架结构的理解,成熟的框架通常使用了多种设计模式,如果你熟悉这些设计模式,毫无疑问,你将迅速掌握框架的结构

设计原则

  单一职责原则(Single
R
esponsibility Principle
SRP)

    一个类,最好只做一件事,只有一个引起它的变化的原因

  开闭封闭原则(Open Closed
Principle,OCP)  

    模块应该对扩展开,对修改封闭.模块应该在尽量不修改原代码的基础上进行扩展.

  里氏代换原则(Liskov Substitution
Principle,LSP)  :

    何基类可以出现的地方,子类一定可以出现,子类一定可以替换基类,而不会对系统功能造成影响   

  依赖倒转原则(Dependency Inversion
Principle,DIP)

    高层次的模块不应该依赖低层次模块的具体,应该依赖于抽象,抽象不应该依赖于具体,具体应该依赖于抽象

  接口隔离原则(Interface Segregation
Principle,ISP)

    使用多个单一的类总是比使用一个大类要好,一个类对另一个类的依赖总是建立在最小的接口上的.

    不要强迫客户使用他们不需要的方法

  合成/聚合复用原则(Composite/Aggregate
Reuse Principle,CARP)

    尽量不要使用继承,尽量使用合成/聚合

  最小知识原则(Principle
of Least Knowledge,PLK,也叫迪米特法则)

设计模式就是实现了这些原则,从而达到了代码复用、增加可维护性的目的。  

设计模式分为三种类型,共23种。

    • 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。

    • 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。

    • 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

Abstract
Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

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

Bridge(桥接模式):将抽象部分与它的实现部分分离,使它们都可以独立地变化。

Builder(建造者模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

Chain
of
Responsibility(职责链模式):为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

Command(命令模式):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

Composite(组合模式):将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。

Decorator(装饰模式):动态地给一个对象添加一些额外的职责。就扩展功能而言,
它比生成子类方式更为灵活。

Facade(外观模式):为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

Factory
Method(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory
Method使一个类的实例化延迟到其子类。

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

Interpreter(解析器模式):给定一个语言,
定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。

Iterator(迭代器模式):提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

Mediator(中介模式):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

Memento(备忘录模式):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。

Observer(观察者模式):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

Prototype(原型模式):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。

Proxy(代理模式):为其他对象提供一个代理以控制对这个对象的访问。

Singleton(单例模式):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。在九月的专栏中,David
Geary探讨了单例模式以及在面对多线程(multi-threading)、类装载器(class
loaders)和序列化(serialization)时如何处理这些缺陷。

State(状态模式):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。

Strategy(策略模式):定义一系列的算法,把它们一个个封装起来,
并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。

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

Visitor(访问者模式):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

设计模式(Design pattern)概述,码迷,mamicode.com

时间: 2024-10-22 07:52:35

设计模式(Design pattern)概述的相关文章

简单工厂设计模式(Simple Factory Design Pattern)

[引言]最近在Youtub上面看到一个讲解.net设计模式的视频,其中作者的一个理解让我印象很深刻:所谓的设计模式其实就是运用面向对象编程的思想来解决平时代码中的紧耦合,低扩展的问题.另外一点比较有见解的是,区分了设计模式(Design Pattern),结构模式(Architecture Pattern),架构类型(Architecture Style). 如下图所示 Design Pattern:是基于代码层面的,就是针对解决功能模块之间的问题而采用恰当的设计模式,比如依赖注入,简单工厂,适

DP什么意思 design pattern 设计模式

DP  design pattern 大话设计模式  中的DP 是设计模式的意思 设计模式的书 ,最经典最原始的就是 GOF 的<设计模式>了. 设计模式的书基本上大多是以这 20 多个模式分开讲.含<大话设计模式> 学了 OOL 写的程序基本上是 OB 的. 只有慢慢掌握了 DP 才能写出真正的 OO 程序. 思想 -> 设计原则 -> DP -> OOD

Design Pattern 设计模式1 - Strategy 1

实现 : Defferent Heros attack Defferently. - 不同的英雄使用不用的招数 Strategy设计的思路: 基类A,更加小的基类B,新的继承类C: 1 从基类A中抽出一个更加小的基类B 2 利用这个更加小的基类B实现不同的效果 3 把这个更加小的基类B包含进基类A中去 4 新的继承类C只需要和基类A打交道,设计不同行为,不需要理会更加小的基类B #pragma once #ifndef _STRATEGY_HEROS_H #define _STRATEGY_HE

State Design Pattern 状态设计模式

设置好内部状态,然后根据不同的函数作为行为模式,进行状态转换. 有点像Finite Automata算法,两者的思想是一样的. 会Finite Automata,那么这个设计模式就很容易了. #pragma once #include <stdlib.h> #include <math.h> #include <random> #include <time.h> enum STATES { FULLY_RENTED, WAITING, GOT_APPLICA

Design Pattern Prototype 原型设计模式

Prototype设计模式其实就是利用一个深拷贝的功能,在原有的类中,通过一个clone函数,创建一个新的类,并可以利用好原有的数据. 这样可以轻易clone出多个新的对象操作,而且都有各自的内存空间. #include <string> #include <iostream> using namespace std; class MultiData { protected: bool b; char c; string s; int a; public: virtual Mult

State Design Pattern 状态设计模式2

其实本设计模式可以实现一些像人工智能式的问答. 这个跟人回答问题差不多,根据不同的问题作出不同的回答,而且在不同的状态,也会作出不同的回答. 如果有大量的数据,那么就可以作出千变万化的问答效果来哦. #include <stdio.h> enum STATE { HUNGARY, EAT, FULL }; class State { STATE myState; public: State(STATE s = HUNGARY) : myState(s) { } void eat() { swi

Abstract Factory Design Pattern 抽象工厂设计模式 - 总结

Abstract Factory Design Pattern 就是一般的Factory Design Pattern的进一步设计,增加一个抽象工厂,然后利用这个工厂可以创建不同基类的类. 当我们需要创建更多不同类的时候就可以使用这个设计模式了. 这个设计模式的代码相对会多点,但是其中的思想就是一般Factory Design Pattern,然后集合更多的基类,看起来挺大的一个设计模式,其思想是挺简单的. 其中具体的实现细节当然是可以有多种实现方法的: 1 利用Factory的基类衍生出不同的

Flyweight Design Pattern 共享元设计模式

就是利用一个类来完成多种任务,不用每次都创建一个新类. 个人觉得这个设计模式在C++里面,好像可以就使用一个函数代替,利用反复调用这个函数完成任务和反复利用这个类,好像差不多. 不过既然是一个设计模式,那么就使用类来完成任务.而对于Java来说是不面向过程的,故此就必须使用这个设计模式了. 我这里设计一个仓库来保存这样的类,需要的时候反复取出来使用. 非常简单的设计模式: #include <stdio.h> class ReusedObject { public: ReusedObject(

Design Pattern Bridge 桥设计模式

桥设计模式其实就是一个简单的has a relationship,就是一个类拥有另一个类,并使用另一个类实现需要的功能. 比如遥控器和电视之间可以使用桥设计模式达到可以使用同一个遥控器控制多台电视机的目的. 这样的设计思想是多种设计模式反反复复使用基本思想. 仔细思考下会发现多种设计模式的底层思想其实是相通的,不过具体实现或者某些细节,应用等有那么一点差别罢了. 下面就实现一个TV和remoter类,其中的remoter是可以随时更换的. #include <stdio.h> class Re