设计模式
双刃剑客
双刃
展开
-
图解设计模式(二十三)Interpreter 模式
读书笔记 仅供参考简述在 Interpreter 模式中,需要编写一个“翻译程序”,翻译自己定义的“迷你语言”,可以通过“迷你语言”编写“迷你程序”。角色和 UMLAbstractExpression定义了语法树节点的共同接口(API)。TerminalExpression对应 BNF 中的终结符表达式。NonterminalExpression对应 BNF 中的非终结符表达式。Context为解释器进行语法解析提供了必要的信息。Client为了推导语法树转载 2020-09-13 23:45:27 · 148 阅读 · 0 评论 -
图解设计模式(二十二)Command 模式
读书笔记 仅供参考简述Command 模式是使用表示命令的类来代替方法的调用,这样就可以管理工作的历史记录。角色和 UMLCommand定义命令的接口(API)。ConcreteCommand负责实现在 Command 角色中定义的接口(API)。Receiver是 Command 角色执行命令时的对象,可以称为命令接收者。Client负责生成 ConcreteCommand 角色并分配 Receiver 角色。Invoker是开始执行命令的角色,会调用转载 2020-09-13 23:40:34 · 199 阅读 · 0 评论 -
图解设计模式(二十一)Proxy 模式
读书笔记 仅供参考简述Proxy, 代理模式,代替一些类进行工作。角色和 UMLSubject定义了使 Proxy 角色和 RealSubject 角色具有一致性的接口。Proxy角色会尽量处理来自 Client 角色的请求。只有当自己不能处理的时候,才会将工作交给 RealSubject 角色。Proxy 只会在必要时才会生成 RealSubject 角色。RealSubject在 Proxy 角色无法胜任工作的时候出场。Client使用 Proxy 模式的角色转载 2020-09-13 23:36:58 · 176 阅读 · 0 评论 -
图解设计模式(二十)Flyweight 模式
读书笔记 仅供参考简述可以翻译成享元模式,通过尽量共享实例来避免 new 出实例。角色和 UMLFlyweight实例会被共享的类。FlyweightFactory生成 Flyweight 的工厂,在工厂中实现共享实例。Client使用 FlyweightFactory 生成 Flyweight。UML例子例程是一个显示字符串的程序,但是其中的字符是 BigChar,即是由字符串构成的字符:......##..........######.....转载 2020-09-13 23:32:58 · 233 阅读 · 0 评论 -
图解设计模式(十九)State 模式
读书笔记 仅供参考简述State 模式就是用类表示状态,从例子来看比较清晰角色和 UMLState表示状态,定义根据不同状态进行不同处理的接口(API)。ConcreteState各个具体的状态。Context角色持有表示当前状态的 ConcreteState 角色。定义了供外部调用者使用 State 模式的接口(API) 。UML例子例程是一个使用金库的 GUI 程序,有使用金库,按下警铃和拨通电话等操作,在白天和晚上,进行操作得到的反应是不一样的.转载 2020-09-11 19:03:10 · 187 阅读 · 0 评论 -
图解设计模式(十八)Memento 模式
读书笔记 仅供参考简述Memento,备忘录模式,主要用于 Undo, Redo,History,Snapshot 等功能。事先将某个时间点的实例的状态保持下来,之后再有必要时,再将实例恢复至当时的状态。角色和 UMLOriginator在保存自己的最新状态时生成 Memento 角色。当把以前的 Memento 角色传给 Originator 时,会自动恢复。Memento将 Originator 角色的内部信息整合在一起。角色拥有以下两种接口(API):wide in.转载 2020-09-11 18:59:50 · 198 阅读 · 0 评论 -
图解设计模式(十七)Observer 模式
读书笔记 仅供参考简述观察者模式,当观察对象的状态发生变化时,会通知给观察者。适用于根据对象状态进行相应处理的场景。角色和 UMLSubject该角色表示观察对象,定义了注册观察者和删除观察者的方法,同时声明了获取现在状态的方法。ConcreteSubject具体的被观察对象,自身状态改变后,会通知已经注册的 Observer 对象。Observer负责接收来自 Subject 角色的状态变化的通知。ConcreteObserver具体的 Observer,当它的转载 2020-09-11 18:54:22 · 114 阅读 · 0 评论 -
图解设计模式(十六)Mediator 模式
读书笔记 仅供参考简述Mediator 就是 仲裁者(中介者)模式。如果将程序看作许多类作为一个团队进行工作,那么团队的交流过程就是组员向仲裁者报告,仲裁者向组员下达指标,组员之间不再相互询问。角色和 UMLMediator角色负责定义与 Colleague 角色进行通信和做出决定的接口(API)。ConcreteMediator负责实现 Mediator 角色的接口(API)。Colleague(同事)负责定义与 Mediator 角色进行通信的接口。Concret转载 2020-09-11 18:49:47 · 170 阅读 · 0 评论 -
图解设计模式(十五)Facade 模式
读书笔记 仅供参考简述使用 Facade 模式为互相关联在一起的错综复杂的类整理出高层接口(API),让系统对外只有一个简单的接口(API),还可以考虑到系统内部各个类之间的责任关系和依赖关系,按照正确的顺序调用哥哥类。角色和 UMLFacade向系统外部提供高层接口(API)构成系统的许多其它角色这些角色不能感知到 Facade 角色Client负责调用 FacadeUML例子例程是一个根据邮箱地址获取用户名,并且生成对应网页的程序,DataBas.转载 2020-09-11 18:44:46 · 277 阅读 · 0 评论 -
图解设计模式(十四)Chain of Responsibility
读书笔记 仅供参考简述职责链模式将多个对象组成一条职责链,然后按照他们在职责链上的顺序一个个找出到底应该谁负责处理。也是推卸责任的结构。角色和 UMLHandler定义了处理请求的接口(API),该角色知道下一个处理者是谁,如果自己无法处理,将请求转发给下一个。ConcreteHandler处理请求的具体角色Client向第一个 ConcreteHandler 角色发送请求的角色。UML例子例程是一个不同人解决问题的程序,问题具有编号,而每一种处理对.转载 2020-09-11 18:35:09 · 121 阅读 · 0 评论 -
图解设计模式 (十三) Visitor 模式
读书笔记 仅供参考简述通常将数据结构和处理数据的代码放到同一个类中,但是如果有多种处理方式,增加处理方式就会多次修改数据类。Visitor 模式(访问者模式)将数据结构与处理分离开来,增加新的处理时,只需要编写新的访问者就可以了。UML 和角色Visitor负责对数据结构中每个具体的元素(ConcreteElement 角色)声明一个用于访问的 visit 方法。ConcreteVisitor负责实现 Visitor 角色定义的接口(API),要实现所有的 visit 方法。转载 2020-09-11 18:27:32 · 373 阅读 · 0 评论 -
图解设计模式 (十二)Decorator 模式
读书笔记 仅供参考简述Decorator 模式(装饰着模式)是维持装饰边框和装饰物的一致性,为对象增加新的功能,但是它还是原来的对象UML 和角色Component增加功能的核心角色,就像是一块蛋糕(抽象),可以被添加很多奶油和水果。Component 定义了蛋糕的接口(API)。ConcreteComponent实现了 Component 角色定义的接口(API)的具体蛋糕。Decorator具有与 Component 角色相同的接口(API),在内部保存了被装饰对象—转载 2020-09-11 18:18:18 · 604 阅读 · 0 评论 -
图解设计模式(十一)Composite 模式
读书笔记 仅供参考简述Composite 是混合物,复合物的意思。类似与“文件夹”的概念,文件夹当中可以放文件也可以放文件夹,文件夹形成了一种容器结构、递归结构,有时文件和文件夹当作同一种对象看待。Composite 模式就是创造这样结构的模式。能够使容器与内容具有一致性,创造出递归结构。UML 和角色Leaf表示“内容”的角色,在该角色中不能放入其他对象,就像一个文件Composite表示容器的角色,可以在其中放入 Leaf 和 Composite 角色,类似文件夹Co.转载 2020-09-11 18:13:29 · 235 阅读 · 0 评论 -
图解设计模式(八)Abstract Factory 模式
读书笔记 仅供参考Abstract Factory抽象工厂的工作室将抽象零件组装为抽象产品。我们并不关心零件的具体实现,而是只关心接口(API)。我们仅使用该接口(API)将零件组装成为产品。UML 和角色AbstractProduct负责定义 AbstractFactory 角色所生成的抽象零件和产品的接口(API)AbstractFactory负责定义用于生成抽象产品的接口(API)ConcreteProduct负责实现 AbstractProduct 角色的接口.转载 2020-09-10 12:57:22 · 176 阅读 · 0 评论 -
图解设计模式(九)Bridge 模式
读书笔记 仅供参考Bridge 模式将类的功能层次结构和类的实现层次结构相连接类的层次结构类的功能层次结构父类具有基本结构 在子类中增加新的功能类的实现层次结构父类通过声明抽象方法来定义接口(API) 子类通过实现具体方法来实现接口(API)UML 和角色Abstraction位于“功能层次结构”顶层,角色保存了 Implementor 的实例RefinedAbstraction继承 Abstraction,添加新功能。Implementor位于“实现转载 2020-09-10 11:57:28 · 169 阅读 · 0 评论 -
图解设计模式(七)Builder 模式
读书笔记 仅供参考Builder 模式用于组装具有复杂结构的实例。角色和 UMLBuilder:负责定义用于生成实例的接口。ConcreteBuilder:负责实现 Builder 角色的接口。定义了在生成实例时实际被调用的方法,还定义了获取最终生成结果的方法。Director:负责使用 Builder 角色的接口来生成实例。Client: 该角色来使用 Builder 模式(可以忽略)例子程序例子是实现采用两种方式编写文档,一个是纯文本,一个是 html 文本。写入最基...转载 2020-09-09 12:57:44 · 151 阅读 · 0 评论 -
图解设计模式(六)原型模式
package com.design;import java.util.HashMap;public class TestPrototype { public static void main(String[] args) { Manager manager = new Manager(); Product upen = new UnderlinePen('~'); Product mBox = new MessageBox('*'); Product sbox = new ...转载 2020-09-09 12:31:31 · 157 阅读 · 0 评论 -
图解设计模式(五)单例模式
package com.design;public class Singleton { private static Singleton singleton; private Singleton() { System.out.println("生成了一个实例"); } public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if ...转载 2020-09-09 12:29:46 · 204 阅读 · 0 评论 -
图解设计模式(四)工厂模式
package com.design;import java.util.ArrayList;import java.util.List;public class TestFactory { public static void main(String[] args) { Factory factory = new IDCardFactory(); Product card1 = factory.create("小明"); Product card2 = factory.crea...转载 2020-09-08 12:00:24 · 183 阅读 · 0 评论 -
图解设计模式(三)模板模式
Template Method 模式1.定义:模板模式,也就是临摹的意思,父类中定义了模板,在子类中实现具体的处理.(活字印刷术)2.示例程序3.示例代码AbstractDisplay.java package TemplateMethod;public abstract class AbstractDisplay { public abstract void open(); public abstract...转载 2020-09-08 11:03:25 · 166 阅读 · 0 评论 -
图解设计模式(二)适配器模式
接口Target要实现的方法在类Adaptee已经实现,可通过继承Apdatee,并实现Target方法。package com.design;class Banner { private String string; public Banner(String string) { this.string = string; } public void showWithParen() { System.out.println("(" + string + ")"); } p...转载 2020-09-08 10:52:14 · 217 阅读 · 1 评论 -
图解设计模式(一)迭代器模式
Iterator迭代器的定义:迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。直接看代码分析理解:接口Iterator集合迭代器/** * @Acthor: * @ClassName:Iterator * @Description:循环遍历 */public interface Iterator { boolean hasNext(); Ob转载 2020-09-07 15:02:14 · 256 阅读 · 0 评论 -
Java设计模式学习06——静态代理与动态代理
转:http://blog.csdn.net/xu__cg/article/details/52970885一、代理模式为某个对象提供一个代理,从而控制这个代理的访问。代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。代理类负责请求的预处理、过滤、将请求分配给委托类处理、以及委托类处理完请求的后续处理。二、代理转载 2017-07-31 12:01:29 · 194 阅读 · 0 评论 -
学习设计模式资料
http://yhzhtk.info/2013/10/30/java-design-patterns-in-stories.html原创 2013-11-05 09:25:34 · 685 阅读 · 0 评论 -
三层架构和MVC模式
转:http://biancheng.dnbcw.info/vc/74514.html关于三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。转载 2012-03-28 09:54:03 · 879 阅读 · 0 评论 -
C#面向对象设计模式纵横谈:Bridge 桥接模式
转: http://kb.cnblogs.com/page/79503/抽象与实现 抽象不应该依赖于实现细节,实现细节应该依赖于抽象。 问题在于如果抽象B由于固有的原因,本身并不稳定,也有可能变化,怎么办? 举例来说 假如我们需要开发一个同时支持PC和手机的坦克游戏,游戏在PC和手机上功能都一样,都有同样的类型,面临同样的功能需求变化,比如坦克可能有很多种不转载 2012-03-25 17:24:47 · 2297 阅读 · 0 评论 -
C++设计模式-适配器(转)
转:http://www.shenmiguo.com/archives/2009/296_design-patterns-adapter.htmlC++设计模式-适配器 定义将一个类的接口转换成客户希望的另外一个接口。适配器(Adapter)模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。也叫包装器(Wrappter)。 结构对象适配器(O转载 2012-02-22 09:15:52 · 769 阅读 · 0 评论 -
C++设计模式-外观模式
转: http://www.shenmiguo.com/archives/2009/308_design-patterns-facade.html/comment-page-1C++设计模式-外观定义为子系统中的一组接口提供一个一致的界面,外观(Facade)模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 结构 理解1. Faca转载 2012-02-17 09:11:23 · 1382 阅读 · 0 评论 -
c++设计模式:模板方法模式(Template Method Pattern)
http://www.cnblogs.com/osyun/archive/2012/02/09/2343999.html定义:模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。钩子的定义:钩子是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。转载 2012-02-16 09:48:55 · 517 阅读 · 0 评论 -
设计模式的解析和实现(C++)之四-Prototype模式
转:http://tech.ddvip.com/2009-03/1238318193112746.html作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。UML结构图: 抽象基类: 1)Prototype:虚拟基类,所有原型的基类,提供Clone接口函数 接口函数: 1)Prototype::Clone函数:纯虚函数,根据不同的转载 2012-02-14 09:08:27 · 397 阅读 · 0 评论 -
Java设计模式学习07——桥接模式
转:http://blog.csdn.net/xu__cg/article/details/52999636一、场景商城系统中常见的商品分类,以电脑为例,如何良好的处理商品分类销售的问题?我们可以用多层继承实现下图的关系:实现代码如下:public interface Computer { void sale();}class转载 2017-07-31 20:59:19 · 271 阅读 · 0 评论 -
Java设计模式学习08——组合模式
转:http://blog.csdn.net/xu__cg/article/details/53011258一、组合模式适用场景把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式对部分对象和整体对象进行管理。二、组合模式结构抽象构件(Conponent)角色:所有类的共有接口,定义了叶子和容器的共同点。叶子(Leaf)构件角色转载 2017-07-31 21:15:46 · 279 阅读 · 0 评论 -
Java设计模式14——中介者(Mediator)模式
转:http://blog.csdn.net/xu__cg/article/details/53133134一、定义用一个中介对象封装一系列对象的交互,中介者是多个对象不需要显示的相互作用,而且可以独立的改变他们的交互。二、举例通过上述定义可能不好理解,下面举一个例子,假如在一个没有总经理的公司中,有三个部门:财务部、市场部、研发部。那么财务转载 2017-08-01 11:50:15 · 259 阅读 · 0 评论 -
Java设计模式--命令模式
命令模式:定义:把一个请求或者操作封装在命令对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。Invoker类 被客户端调用,可以接受命令请求,设计命令队列,决定是否相应该请求,记录或撤销或重做命令请求,记录日志等等.public class Invoker { private Command command; p...原创 2019-02-14 11:46:35 · 183 阅读 · 0 评论 -
Java设计模式12:装饰器模式
装饰者模式(Decorator Pattern),别名(Warpper)。 动态的将责任附加到对象上。若要扩展功能,装饰者提供比继承更有弹性的替代方案。装饰者模式从属的大类是结构型模式(该大类下的设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式)。涉及的设计原则:1. 开放–关闭原则类(应该对扩展开放,对修改关闭)2. 多用组合,少用继承类图...转载 2019-02-13 12:56:42 · 502 阅读 · 0 评论 -
Java设计模式12——责任链模式
转:http://blog.csdn.net/xu__cg/article/details/53069998一、定义责任链是每一个对象持有其下家的引用而形成的一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。角色: 抽象处理者:抽...转载 2017-09-15 11:44:56 · 259 阅读 · 0 评论 -
Java设计模式学习05——适配器模式
转:http://blog.csdn.net/xu__cg/article/details/52948633之前讲的几种模式都是创建型模式,现在开始讲结构型模式。何为结构型模式?结构型模式的 核心作用, 是从程序结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。一、适配器模式定义适配器模式,把一个类接口变化成客户端所期待的另一个类的接口,使原来转载 2017-07-27 11:28:00 · 262 阅读 · 0 评论 -
Java设计模式10——外观模式
转:http://blog.csdn.net/xu__cg/article/details/53047880外观模式是最简单的设计模式之一,所以我就不再去重写了,简单的总结转载看到的一篇文章,原文链接:http://blog.csdn.net/jason0539/article/details/22775311一、定义外观模式(也称为门面模式)定义了一个高层转载 2017-07-27 11:38:42 · 206 阅读 · 0 评论 -
Java设计模式学习——前言与介绍
转:http://blog.csdn.net/xu__cg/article/details/52901464前言 在我平时的学习与项目工作中,经常会纠结于类的框架搭建,以及类间的关系梳理,而当我通过查看一些牛人的代码解释时总会有一种有一种豁然开朗之感,感觉别人写的代码层次清晰,易于理解。久而久之,我确实感觉到了设计模式在项目工作中的重要性,所以这段时间我会简单的学习Java中的设计模式,当然深刻...转载 2017-07-26 21:37:41 · 397 阅读 · 0 评论 -
Java设计模式学习09——装饰模式
转:http://blog.csdn.net/xu__cg/article/details/53024490一、定义装饰(Decorate)模式又称为包装(Wrapper)模式。装饰模式是以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。二、职责动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术,无须通过继承增加子转载 2017-07-26 14:24:39 · 295 阅读 · 0 评论