
软件设计模式
is_thinking
专注,认真
展开
-
外观模式
外观模式 facade pattern:外部与一个子系统的通信通过一个统一的外观角色进行。为子系统中的一组接口提供一个一致的入口,外观模式定义了一个高层接口,这个接口使这个子系统更加容易使用。转载 2016-11-29 16:54:56 · 423 阅读 · 0 评论 -
观察者模式
一 应用场景 社交网络中,当我们关注的一个人发表状态后粉丝就会有通知。这就用到了观察者模式,即:当一个对象发生改变的时候,其他对象将相应的做出反应。二 定义 观察者模式 Observer Pattern: 定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(M转载 2016-12-04 12:46:26 · 535 阅读 · 0 评论 -
状态模式
一 应用场景 一个机器有,一个排气状态,一个是压缩状态。在运行时,不同的状态会有不同的行为,当前的状态机在适当的时候会过渡到下一状态。二 定义 状态模式State Pattern:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。 Context 环境类:环境类又称为上下文类,它转载 2016-12-04 15:37:19 · 858 阅读 · 0 评论 -
建造者模式
一 适用场景 游戏角色中每个人物都有不同的外形,脸型、肤色、体型等等。玩家不关心这些具体的细节,只关心最终的造型。二 定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。 建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者转载 2016-11-21 16:38:26 · 905 阅读 · 0 评论 -
适配器模式
一 应用场景 加入一个美国人身在欧洲,假如欧洲的电压标准是230V,而美国的民用电压一般是110V,如果这个美国人想要用欧洲的电,那么需要一个转换器,把230V的电压转换为110V。 上述例子的三个类: 欧洲电压:Adaptee 美国人用电设备:Target 转换器:Adapter二 定义 将一个类的接口转换成客户希望的另外一个接口这样使得原本由于接口不兼容而不能一起工作的那些类可以一起转载 2016-11-22 16:01:55 · 365 阅读 · 0 评论 -
策略模式
策略模式 Strategy Pattern:定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。策略模式是一种对象行为型模式。 Context 环境类:环境类是使用算法的角色,它在解决某个问题(即实现某个方法)时可以采用多原创 2016-12-05 15:07:02 · 497 阅读 · 0 评论 -
模板方法模式
模板方法模式Template Method Pattern:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。AbstractClass抽象类:在抽象类中定义了一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个基原创 2016-12-05 16:02:19 · 680 阅读 · 0 评论 -
访问者模式
一 使用场景 访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。二 定义 问者模式Visitor Pattern: 提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。 Vistor抽象转载 2016-12-05 17:14:02 · 596 阅读 · 0 评论 -
桥接模式Bridge Pattern
一 使用场景 我有三种型号的铅笔来绘制4种不同的颜色,需要准备3*4总共12只铅笔。如果我用三种型号的毛笔,来绘制4种不同的颜色,只需要3种毛笔外加4种笔墨即可。同理软件系统中存在两个独立变化的维度,通过桥接模式可以将这两种维度区分开来,使两种可以独立的扩展,让系统更加符合单一的原则。二 定义 桥接模式:是一种对象结构模型,将抽象部分(Abstraction)与实现部分(Implementati转载 2016-11-23 17:43:02 · 463 阅读 · 0 评论 -
组合模式
一 使用场景 做一个杀毒软件对个人电脑里的文件夹进行扫描,电脑文件夹里面可能包含文件也可能是一个文件夹。类似于这用树形结构。或者比如一个公司,公司下面有部门(叶子)和子公司(节点)。子公司也有部门,可能有子公司也可能没有子公司。二 定义 组合模式是多个对象形成树形结构以表示具有“整体-部分”关系的层次结构。组合模式对单个对象和组合对象的使用具有一致性。 Component抽象构件:这是一个转载 2016-11-24 21:45:49 · 432 阅读 · 0 评论 -
备忘录模式
备忘录模式 Memento Pattern:在不破坏封装的前提下,捕获一个对象的内部状体,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模。Originator 原发器:它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态转载 2016-12-03 19:11:00 · 591 阅读 · 0 评论 -
中介者模式
用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模Mediator 抽象中介者:定义一个接口,用于各个对象之间的通信。ConcreteMediator 具体中介者:抽象中介者的子类,通过协调各个同事对象来实现协作行为,维持各个对各个对象的引用。Colleage 抽象同事类:定义各个对象的公有方法。同时维转载 2016-12-03 16:20:27 · 430 阅读 · 0 评论 -
面向对象设计的几个基本原则和单例模式
本文是根据刘伟老师《设计模式的艺术》一书和网上资料整理而成,仅供学习交流之用。一 设计原则 1 单一职责原则:一个类只负责一个功能领域中的相应职责,或者说一个类只有一个引起它变化的原因,简单来说就是一个类不能承担太多的职责。2 开闭原则:一个软件实体应当对扩展开放,对修改关闭,即软件实体尽量在不修改原有代码的情况下进行扩展。3 里氏代换:所有引用基类的地方必须能透明的使用其子类的对象。在软件中将一转载 2016-11-17 21:28:30 · 1348 阅读 · 0 评论 -
享元模式
一 应用场景 一个文本字符串存在很多的重复字符,如果每一个字符的用一个独立的对象来保存的话会浪费大量的资源。 或者围棋游戏中,每个棋子都是白色或者黑色并且大小一样只是位置不同。如果每个棋子都用一个独立的对象存储,那么和上面一样会造成大量的浪费。 享元模式就是为解决这种问题而生。二 定义 享元模式 Flyweight Pattern:运用共享技术有效的支持大量细粒度对象的复用。使系统使用少量的转载 2016-11-29 22:23:21 · 519 阅读 · 0 评论 -
代理模式
一 应用场景 相亲的时候一般有一个媒人,男方说什么话都通过媒人传递给女方。二 定义 代理模式Proxy Pattern:给某个对象提供一个代理,并由代理对象控制对原对象的引用,代理对象是一种对象结构模式。 Subject 抽象主题角色:声明真实主题和代理主题的共同接口,使得在任何使用真实主题的地方都可以使用代理主题,客户端通常都要针对抽象主题进行编程。Proxy 代理主题角色:代理主题包含了对原创 2016-11-30 21:30:44 · 439 阅读 · 0 评论 -
职责链模式
职责链模式通过建立一条链来组织请求的处理者,请求将沿着链进行传递,请求发送者无须知道请求在何时、何处以及如何被处理,实现了请求发送者与处理者的解耦。转载 2016-11-30 23:12:12 · 426 阅读 · 0 评论 -
命令模式
命令模式的本质是对请求进行封装,一个请求对应于一个命令,将发出命令的责任和执行命令的责任分割开。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求如何被接收、操作是否被执行、何时被执行,以及是怎么被执行的。转载 2016-12-02 20:38:18 · 837 阅读 · 0 评论 -
迭代器模式
一定义 Iterator Pattern 迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 Iterator 抽象迭代器:定义访问和遍历元素的接口。ConcreteIterator 具体迭代器:实现抽象迭代器的接口,完成对聚合对象的遍历,同时在迭代器中通过游标来记录在聚合对象中所出的当前位置。Aggregate 抽象聚合类:用于存储和管理元素对象,声明cr转载 2016-12-03 08:24:46 · 566 阅读 · 0 评论 -
原型模式
一 应用场景 填写一个报表,有些重复的内容不必每次都偶重复填写,只需保存一个固定的模板,只需要填写不重复的内容即可。一 定义 使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象,它是一种对象创建型模式。 将一个原型对象传递给要发动创建的对象,这个要发动创建的对象通过请求原对象克隆自己来实现创建过程。本质用原型实例指定创建对象的种类,并且通过拷贝这些原型转载 2016-11-21 15:29:16 · 379 阅读 · 0 评论 -
抽象工厂模式
一 概念解释定义:抽象工厂模式提供一个创建一系列相关或者相互依赖的对象接口,而无须指明他们的具体类。抽象模式又称为Kit模式。是一种对象创建模式。抽象工厂模式是为创建一组对象提供了一种解决方案。与工厂方法模式相比抽象工厂模式中的具体工厂不只是创建一种产品,而是负责创建族产品。引入相关概念:1 产品等级结构:即产品的继承结构,比如抽象类是一个矩形,其子类有红色矩形,蓝色矩形,灰色矩形等。2转载 2016-11-20 18:49:35 · 741 阅读 · 0 评论 -
工厂方法模式
工厂方法模式 该模式又简称为工厂模式,定义一个用于创建对象的接口,让子类决定让哪一个类实例化,这样可以让产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该确定实例化哪一个具体产品类。 Product 抽象产品,是工厂方法模式所创建对象的超类型,也就是产品对象的公共父类。 ConcreteProduct 具体产品,实现了抽象产品的接口,某种类型的具体产品有专门的具体工转载 2016-11-20 13:13:32 · 519 阅读 · 0 评论 -
简单工厂模式
简单工厂模式 定义一个工厂类,它可以根据不同的参数返回不同的实例,被创建的实例通常都有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态方法,所以简单工厂模式又被称为静态工厂模式。 上图解释如下: Factory 工厂类,是简单工厂模式的核心,负责所有产品实例的逻辑,工厂类可以被外界外界直接调用,创建所需的产品对象,工厂类提供静态工厂方法,返回的类型为抽象产品类型Product。转载 2016-11-20 13:09:23 · 491 阅读 · 0 评论 -
装饰器模式
一 定义 装饰器模式decorator pattern:动态的给一个对象增加一些额外的职责,在不改变本身功能的基础上增加一些额外的行为。 Component 抽象构件:是具体构件和抽象装饰类的共同父类,声明了在具体构件中的实现的业务方法。ConcreteComponent 具体的组件对象:是抽象构件构件的子类,实现具体的操作,可以增加额外的操作方法。(说的直白一点:装饰器就是给它增加装饰的)转载 2016-11-25 12:43:16 · 434 阅读 · 0 评论