![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 74
epsilon1
这个作者很懒,什么都没留下…
展开
-
UML六大关系
关联关系(Association)定义 关联关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系。表示 在UML类图中,用实线连接有关联的对象所对应的类,在使用C#、C++和Java等编程语言实现关联关系时,通常将一个类的对象作为另一个类的属性。UML类图 Person类与Bicycle类之间存在关联关系,这意味着在Person类中需要定义一个原创 2016-06-24 09:35:40 · 432 阅读 · 0 评论 -
观察者模式(Observer)
一、模式动机 建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展,这就是观察者模式的模式动机。二、模式定义 观察者模式(Observer Pattern):定义对象间的一种一原创 2016-06-25 21:31:43 · 530 阅读 · 0 评论 -
中介者模式(Mediator)
一、模式动机 在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责。 对于一个模块,可能由很多对象构成,而且这些对象之间可能存在相互的引用,为了减少对象两两之间复杂的引用关系,使之成为一个松耦合的系统,我们需要使用中介者模式,这就是中介者模式的模式动机。二、模式定义 中介者模式(Mediator Pattern)定义:用一个中原创 2016-06-25 22:22:46 · 466 阅读 · 0 评论 -
职责链模式(Chain of Responsibility)
一、模式动机 职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求。 链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传递,由链上的处理者对请求进行相应的处理。 客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,将请求的发送者和请求的处理者解耦。这就是职责链模式的模式动机。二、原创 2016-06-26 10:02:47 · 480 阅读 · 0 评论 -
策略模式(Strategy)
一、模式动机 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。 在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。 二、模式定义 策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装原创 2016-06-26 10:37:47 · 601 阅读 · 0 评论 -
迭代器模式(Iterator)
一、模式动机 一个聚合对象,如一个列表(List)或者一个集合(Set),应该提供一种方法来让别人可以访问它的元素,而又不需要暴露它的内部结构。 针对不同的需要,可能还要以不同的方式遍历整个聚合对象,但是我们并不希望在聚合对象的抽象层接口中充斥着各种不同遍历的操作。 在迭代器模式中,提供一个外部的迭代器来对聚合对象进行访问和遍历,迭代器定义了一个访问该聚合元素的接口,并且可以原创 2016-06-26 11:53:48 · 511 阅读 · 0 评论 -
模板方法模式(Template Method)
一、模式动机 准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。 模版方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负 责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。代表这些具体逻辑步原创 2016-06-26 12:53:56 · 549 阅读 · 0 评论 -
访问者模式(Visitor)
一、模式动机 对于系统中的某些对象,它们存储在同一个集合中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其访问方式有所不同,访问者模式为解决这类问题而诞生。 在实际使用时,对同一集合对象的操作并不是唯一的,对相同的元素对象可能存在多种不同的操作方式。 而且这些操作方式并不稳定,可能还需要增加新的操作,以满足新的业务需求。二、原创 2016-06-26 14:38:54 · 399 阅读 · 0 评论 -
命令模式(Command)
一、模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。二、模式定义 命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行原创 2016-06-26 15:27:03 · 529 阅读 · 0 评论 -
备忘录模式(Memento)
一、模式动机 在应用软件的开发过程中,有时我们有必要记录一个对象的内部状态。为了允许用户取消不确定的操作或从错误中恢复过来,需要实现备份点和撤销机制,而要实现这些机制,我们必须事先将状态信息保存在某处,这样状态才能将对象恢复到它们原先的状态。 但是对象通常封装了其部分或所有的状态信息,使得其状态不能被其它对象访问,也就不可能在该对象之外保存其状态,而暴露其内部状态又将违反封装的原则,可原创 2016-06-26 15:54:08 · 435 阅读 · 0 评论 -
解释器模式(Interpreter)
一、模式动机 如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子,因此可以构建一个解释器,该解释器通过解释这些句子来解决这些问题。 解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发的编译器中。二、模式定义 解释器模式(Interpreter Pattern) :定义语言的文法,并且建立一个解释器来解释该语言原创 2016-06-26 19:00:33 · 2093 阅读 · 0 评论 -
设计模式概述
一、设计模式定义 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式一般有如下几个基本要素:模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式,其中的关键元素包括以下四个方面:模式名称 (Pattern name) 问题 (Problem) 解原创 2016-06-23 15:25:39 · 402 阅读 · 0 评论 -
状态模式(State)
一、模式动机 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象。这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。 状态模式的关键是引入了一个抽象类来专门表示对象的状态,这个类我们叫做状态类,而对象的具体状态都继承了该原创 2016-06-25 19:23:27 · 441 阅读 · 0 评论 -
代理模式(Proxy)
一、模式动机 一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。如在网页上查看一张图片,由于网速等原因图片不能立即显示,我们可以在图片传输过程中先把一些简单的用于描述图片的文字传输到客户端,此时这些文字就成为了图片的代理。二、模式定义 代理模式(Proxy Pattern):给某一个对象提供一原创 2016-06-25 18:50:02 · 443 阅读 · 0 评论 -
外观模式(Facade)
一、模式动机 将一个系统划分为若干个子系统有利于降低系统的复杂性,一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统中较一般的设置提供了一个单一而简单的界面。 外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的外观(Facade)对象进行。就如同医院的接待员一样,外观模式的外观类将客户端与子系统的内部复杂性分隔开原创 2016-06-25 17:05:57 · 586 阅读 · 0 评论 -
简单工厂模式(Simple Factory)
一、模式动机 考虑一个简单场景,一个软件系统可以提供多个外观不同的按钮,这些按钮都源自同一个基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望不需要知道这些具体按钮类的名字,只需要知道按钮类的一个参数,并提供一个调用方便的方法,把该参数传入方法即可返回一个相应的按钮对象。二、模式定义 简单工厂模式(Simple Factory Pattern):又称原创 2016-06-24 14:56:56 · 366 阅读 · 0 评论 -
单例模式(Singleton)
一、模式动机 对于系统中的某些类来说,有且只能有一个实例。例如:一个系统只能有一个窗口管理器。系统中可以有许多打印机,但是只能有一个打印机正在工作。问题 我们怎样保证一个类只有一个实例并且这个实例易于被访问呢?解决方法 让类自身负责保存它的唯一实例。这个类可以保证没有其它实例被创建,并且它可以提供一个访问该实例的方法。这就是单例模式——Singleton Pattern。二、模式定义单原创 2016-06-24 11:29:34 · 512 阅读 · 0 评论 -
工厂方法模式(Factory Method)
一、模式动机 简单工厂模式如果需要增加新类型,那么需要修改工厂类的代码,这就使得整个设计在一定程度上违反了“开放封闭原则”。我们定义一个抽象的工厂类,而定义具体的工厂类来实现这个抽象按钮工厂类中定义的方法。抽象化的结果使这种结构可以在不修改具体工厂类的情况下引进新的产品。这一特点使得工厂方法模式具有超越简单工厂模式的优越性。二、模式定义 工厂方法模式(Factory Method Patt原创 2016-06-24 17:04:01 · 284 阅读 · 0 评论 -
原型模式(Prototype)
一、模式动机 有些对象的创建过程较为复杂,而且有时候需要频繁创建,原型模式通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是原型模式的动机。二、模式定义 原型模式(Prototype Pattern):它是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式允许一个对象再创建另外一个可定制的对原创 2016-06-24 18:35:51 · 491 阅读 · 0 评论 -
建造者模式(Builder Pattern)
一、模式动机 在某些情况下,一个对象会有一些重要的属性,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出。二、模式定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂原创 2016-06-24 19:06:36 · 348 阅读 · 0 评论 -
抽象工厂模式(Abstract Factory)
一、模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。二、模式定义 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的原创 2016-06-24 19:34:29 · 422 阅读 · 0 评论 -
适配器模式(Adapter)
一、模式动机 通常,客户类(client of class)通过类的接口访问它提供的服务。有时现有的类(existing class )可以提供客户类的功能需要,但是它所提供的接口不一定是客户类所期望的。这是由于现有的接口名称与客户类所查找的不同等诸多不同原因导致的。 在这种情况下, 现有的接口需要转化 (convert) 为客户类期望的接口,这样保证了对现有类的重用。适配器模式(Ada原创 2016-06-24 20:58:01 · 443 阅读 · 0 评论 -
桥接模式(Bridge)
一、模式动机 桥接模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”二、模式定义 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。三、模式结构原始结构 解耦变化原创 2016-06-24 21:48:06 · 616 阅读 · 0 评论 -
装饰模式(Decorator Pattern)
一、模式动机 有时我们希望给某个对象而不是整个类添加一些功能。例如:一个图形用户界面工具箱允许我们对任意一个用户界面组件添加一些新的特性,如增加一个边框;或者增加一些行为,如窗口的滚动 一种较为灵活的方式是将组件嵌入另一个对象中,由这个对象来添加边框。我们称这个嵌入的对象为装饰器(Decorator)。这个装饰与它所装饰的组件接口 一致,因此它对使用该组件的客户透明。它将客户请求转发给原创 2016-06-24 22:23:39 · 435 阅读 · 0 评论 -
组合模式 (Composite Pattern)
一、模式动机 对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。(递归调用) 由于容器对象和叶子对象在功能上的区别,在使用这些对象的客户端代码中必须有区别地对待容器对象和叶子对象,而对于这些对象的区别对待将会使得程序非常复杂。 组合模式描述了如何将容器对象原创 2016-06-25 15:53:53 · 446 阅读 · 0 评论 -
享元模式(Flyweight)
一、模式动机 享元模式对那些通常因为数量太大而难以用对象来表示的概念或实体进行建模。二、模式定义 享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象。 系统只使用少量的对象,而这些对象都很近,状态变化很小,对象使用次数增多。享元模式是一种对象结构型模式。三、模式结构四、参与者Flyweight:抽象享元类ConcreteFlyweight:具体享元类Unshar原创 2016-06-25 16:47:09 · 467 阅读 · 0 评论 -
面向对象的七大设计原则
一、开放封闭原则OCP 开放封闭原则(Open-Closed Principle,OCP)是面向对象的可复用设计(Object Oriented Design或OOD)的基石。其他设计原则(里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则)是实现开放封闭原则的手段和工具。定义 一个软件实体应当对扩展开放,对修改关闭。即在设计一个模块的时候,应当使这个模块可以在不被修改的原创 2016-06-23 18:57:18 · 508 阅读 · 0 评论