
设计模式相关技术
与Java技术相关的设计模式
朱小厮
你知道的越多 你不知道的也就越多
展开
-
设计模式:各个模式间的对比
建造者模式、抽象工厂模式、工厂模式的区别建造者模式和抽象工厂模式 与抽象工厂模式相比,建造者模式返回一个组装好的完整产品,而抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品登记结构,构成了一个产品族。在抽象工厂模式中,客户端实例化工厂类,然后调用工厂方法获取所需产品对象,而在建造者模式中,客户端可以不直接调用建造者的相关方法,而是通过指挥者类来指导如何生成对象,包括对象的组装过程和建造步骤原创 2016-04-25 20:25:37 · 8461 阅读 · 1 评论 -
设计模式:访问者模式(Vistor)
访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式,这就是访问者模式的模式动机。访问者模式即表示一个作用于某对象结构中的各元素的操作原创 2016-04-25 20:22:35 · 7632 阅读 · 0 评论 -
设计模式:策略模式(Strategy)
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 策略模式的角色: 1. 抽象策略角色(Strategy):策略类,通常由一个接口或者抽象类实现 2. 具体策略角色(ConcreteStrategy):包装了相关的算法和行为 3. 环境角色(Context):持有一个策略类的引用,最终给客户端调用这里引用参考资料3中的例子原创 2016-04-25 20:19:57 · 6817 阅读 · 0 评论 -
设计模式:状态模式(State)
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 状态模式的角色 1. 环境角色Context):也称上下文,定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个具体状态类的实例给出此环境对象的现有状态。 2. 抽象状态角色(State):定义一个接口,用以封装环境对象的一个特定的状态所对应的行为。 3. 具体状态角色(ConcreteState):每一个具体原创 2016-04-25 20:17:58 · 7668 阅读 · 0 评论 -
设计模式:观察者模式(Observer)
定义对象见的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式的角色 1. 抽象主题角色(Subject):把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。 2. 具体主题角色(ConcreteSubject):在具体主题内部状态改原创 2016-04-25 20:15:45 · 6193 阅读 · 0 评论 -
设计模式:备忘录模式(Memento)
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。备忘录模式的角色: 1. 原发器(Originator):负责创建一个备忘录,用以记录当前对象的内部状态,通过也可以使用它来利用备忘录回复内部状态。同时原发器还可以根据需要决定Memento存储Originator的那些内部状态。 2. 备忘录(Memento):用于存储Origi原创 2016-04-25 20:10:35 · 5274 阅读 · 0 评论 -
设计模式:中介者模式(Mediator)
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。 中介者模式中的角色: 1. 抽象中介者(Mediator):定义了同事对象到中介者对象之间的接口。 2. 具体中介者(ConcreteMediator):定义抽象中介者的方法,它需要知道所有的具体同事类,同时需要从具体的同事类那里接收消息,并且向具体的同事类发送原创 2016-04-04 20:20:05 · 2815 阅读 · 0 评论 -
设计模式:迭代器模式(Iterator)
提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露改对象的内部表示。又称游标(Cursor)模式。 迭代器模式角色组成: 1. 抽象容器角色(Aggregate):负责提供创建具体迭代器角色的接口,一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。 2. 具体容器角色(ConcreteAggregate):就是实现抽象原创 2016-04-04 20:15:59 · 3153 阅读 · 0 评论 -
设计模式:命令模式(Command)
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以支持可撤销的操作。 命令模式的角色 1. 客户端角色(Client):创建一个具体命令(ConcreteCommand)对象并确定其接收者。 2. 命令角色(Command):声明一个给所有命令类的抽象接口。 3. 具体命令角色(ConcreteCommand):定义一个接收者和行为之间的弱耦合;实原创 2016-04-04 19:51:20 · 2598 阅读 · 0 评论 -
设计模式:责任链模式(Chain of Responsibility)
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。 责任链模式的角色: 1. 抽象处理者角色(Handler):定义出一个处理请求的接口。如果需要,接口可以定义出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的原创 2016-04-04 19:46:16 · 5453 阅读 · 0 评论 -
设计模式:解释器模式(Interpreter)
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 解释器模式的角色: 1. 抽象表达式角色(AbstractExpression):声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法,称作解释操作。 2. 终结符表达式角色(Terminal Expression):实现了抽象表达式角色所需求的接口,主要原创 2016-04-04 19:43:23 · 2451 阅读 · 0 评论 -
设计模式:模板方法模式(Template Method)
模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。一次性的实现一个算法的不变部分,并将可变的行为留给子类来实现。 模板方法的关键是:子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。 模板方法模式中的方法可以分为两大类:模板方法和基本方法。1 模板方法 一个原创 2016-03-30 19:52:03 · 3500 阅读 · 1 评论 -
设计模式:代理模式(Proxy)
代理模式:为其他对象提供一种代理以控制对这个对象的访问。 代理模式中的角色:抽象主题角色(Subject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。具体主题角色(RealSubject):也称为委托角色或者被代理角色。定义了代理对象所代表的目标对象。代理主题角色(Proxy):也叫委托类、代理类。代理对象内部含有目标对象的引用,从而可以在任原创 2016-03-29 21:38:09 · 22719 阅读 · 12 评论 -
设计模式:享元模式(Flyweight)
运用共享技术有效地支持大量细粒度的对象。又名“蝇量模式”。 在Java语言中,String类型就是使用了享元模式。String对象是final类型,对象一旦创建就不可改变。在JAVA中字符串常量都是存在常量池中的,Java会确保一个字符串常量在常量池中只有一个拷贝。譬如:String a = "abc";String b = "abc";System.out.println(a==b); 输原创 2016-03-29 21:31:30 · 3440 阅读 · 2 评论 -
设计模式:外观模式(Facade)
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式又称门面模式。 外观模式的角色 1. 门面角色:客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。 2. 子系统角色:可以同时有一个或者多个子系统。每个子系统都不是一个单独原创 2016-03-29 21:25:14 · 3164 阅读 · 1 评论 -
设计模式:装饰模式(Decorator)
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式想必生成子类更为灵活。 装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 装饰模式中的角色有: 1. 抽象构件角色(Component):给出一个抽象接口,以规范准备接受附加责任的对象。 2. 具体构件角色(ConcreteComponent):定义一个将要接收附加责任原创 2016-03-29 21:22:13 · 3646 阅读 · 1 评论 -
设计模式:组合模式(Composite)
将对象组合成属性结构以表示“部分-整体”的层次结构。组合使得用户和单个对象和组合对象的使用具有一致性。 组合模式设计的角色: 1. Component:是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component. 2. Leaf:在组合中表示叶子节点对象,叶子节点没有子节点。 3. Composite:定义树枝节点行为,用来存储子部件,原创 2016-03-29 21:16:50 · 3555 阅读 · 1 评论 -
设计模式:桥接模式(Bridge)
定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 意图:将抽象与实现解耦。 桥接模式主要应对的是由于实际的需要,某个类具有两个或者两个以上的维度变化(违反了SRP原则),如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。桥接模式所涉及的角色 1. Abstraction:定义抽象接口,拥有一个Implementor类型的对象引用 2. RefinedAbstracti原创 2016-03-28 19:02:57 · 16347 阅读 · 3 评论 -
设计模式:适配器模式(Adapter)
适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。 适配器模式有类适配器模式和对象适配器模式两种不同的形式。 类适配器 类适配器模式把适配的类的API转换成目标类的API 适配器模式所涉及的角色:目标角色(Target): 这就是所期待得到的接口。源角色(Adaptee):需要适配的接口适配器角色(Ada原创 2016-03-28 18:56:23 · 6552 阅读 · 0 评论 -
设计模式:原型模式(Prototype)
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 举个例子: 1 原型(实际上是implements了Cloneable接口,进而重写clone()方法)public class ProtoType implements Cloneable{ private String name; @Override public ProtoType c原创 2016-03-25 16:07:26 · 2462 阅读 · 0 评论 -
singleton模式四种线程安全的实现
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 1.描述: Singleton(单例)是设计模式的一种,为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2.主要特点: 1)单例类确保自己只有一个实例(构造函数私有:不被外部实例化,也不被继承)。...转载 2015-12-29 15:30:43 · 17385 阅读 · 5 评论 -
设计模式:开篇
最近在整理设计模式这个系列,这里做一下全局的概括。本系列的文章对于初识设计模式的朋友也许不太适应,对于那些了解过或者使用过设计模式的人比较适应,本系列的文章对设计模式的关键点做了一个终结性的陈述,也列举了相关例子方便理解和记忆,但是并没有循序渐进的讲解。譬如,在适配器模式中,博主阐述了适配器的定义、类图、案例等,但是并没有阐述类似“比如你买了一个港版的iphone6s,但是大陆的插座不并适合,...原创 2016-03-23 21:32:44 · 5654 阅读 · 5 评论 -
设计模式:单例模式(Singleton)
单例模式在23个设计模式中算得上是最简单的一个了,也许你会有异议,那就换成“最简单之一”,这样就严谨了很多。 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 适用性:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。 单例模式有5中写法(线程安全): 1....原创 2016-03-23 21:37:46 · 12036 阅读 · 5 评论 -
设计模式:工厂方法模式(Factory Method)和抽象工厂模式(Abstact Factory)
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象。 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大原创 2016-03-24 21:42:17 · 6232 阅读 · 4 评论 -
设计模式:建造者模式(Builder)
建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式通常包括下几个角色: 1. builder(抽象建造者):给出一个抽象结论,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的那些部分的创建,并不涉及具体的对象部件的创建。 2. ConcreteBuilder(具体建造者):实现Builder接口,针对不同的商业逻辑,具体化复原创 2016-03-25 11:18:54 · 8794 阅读 · 1 评论