JAVA 设计模式
可口可乐的围脖
这个作者很懒,什么都没留下…
展开
-
迭代器(Iterator) in Java
定义:迭代器模式提供了一种方法来访问一个容器对象种的各个元素,而又不暴露这个对象的内部细节。在Java中已经默认提供了Iterator支持,各种容器类都进行了实现,而事实上,迭代器模式就是为了解决如何遍历这些容器里的元素而诞生的。迭代器模式主要有以下的角色:Iterator抽象迭代器: 负责定义访问与遍历元素的接口。基本有3个固定的方法hasNext(),next(),转载 2014-12-18 14:19:13 · 537 阅读 · 0 评论 -
装饰器(Decorator)in Java
1.认识装饰器模式装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的设计中,而我们也应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式转载 2014-12-18 14:39:40 · 433 阅读 · 0 评论 -
观察者(Observer) in Java
定义:又叫发布订阅模式(Publish/subscribe),它定义了对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。这个定义还是比较通俗易懂的。我看了一遍,发现这不就是微博吗?我发布一条微博,那么所有关注我的人,都会收到通知,然后在新鲜事里显示出来。没错,就是这样!观察者模式有4个角色:被观察者(Observable):转载 2014-12-18 14:18:25 · 441 阅读 · 0 评论 -
命令(Command) in Java
定义:命令模式是一种高内聚的模式。它将一个请求封装成一个对象,从而让使用不同请求来把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销与恢复功能。听起来,好复杂!在程序员之间,流传着这样一句话:程序写到最后,就是if-else,for,while。真是枯燥啊!其实能体会到这种感觉,说明作为一个程序员,你已经有了一定的造诣了。那如何提高呢?试想,在代码中,你有很多if-转载 2014-12-18 14:20:16 · 463 阅读 · 0 评论 -
任链(chain of Responsibility) in Java
定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。责任链由2个角色组成:Handler抽象处理者角色 它定义了一个处理请求的接口。当然对于链子的不同实现,也可以在这个角色中实现后继链。Concrete Handler具体处理者角色 实现抽象角色中定义的接口,并处理它所负责的请求。如转载 2014-12-18 14:34:25 · 473 阅读 · 0 评论 -
组合(composite) in Java
定义:组合模式(Composite Pattern)也叫合成模式,有时又叫做部分-整体模式(Part-Whole),主要是用来描述部分与整体的关系。确切的定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式类图如下:组合模式有以下几个角色:Component抽象构件角色 定义参加组合对象的共有方法和树形,可以定义一转载 2014-12-18 14:36:19 · 430 阅读 · 0 评论 -
单例(singleton) in Java
概要单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。在本月的专栏中,David Geary探讨了单例模式以及在面对多线程(multithreading)、类装载器(classloaders)和序列化(serialization)时如何处理这些缺陷。单例模式适合于一个类只有一个实例的情况,比如窗口管理器,打印缓冲池和文件系统,它们都是原型的例子。典型的情况是,那转载 2014-12-18 14:37:47 · 503 阅读 · 0 评论 -
适配器(Adapter)in Java
类适配器:客户的开发人员定义了一个接口,期望用这个接口来完成整数的求和操作,接口定义如下: Java代码public interface Operation{ public int add(int a,int b); } 开发人员在了解这个接口的定义后,发现一个第三方类,里面有一个方法能实现他们期望的功能,其代码如下: Java代码public class转载 2014-12-18 14:40:24 · 430 阅读 · 0 评论 -
应用设计模式开发命令行交互程序
本文介绍了如何通过使用设计模式来优化命令行交互程序的开发。传统的命令行交互模式,不具备回退、跳转等功能,缺少用户交互的灵活性。本文通过几种设计模式的组合,实现了一个通用的轻量级的命令行交互程序的解决方案,同时为系统重构、功能扩展以及代码的维护提供了方便。背景介绍人机交互的方式最初起始于命令行交互,虽然图形界面的交互方式应用越来越广泛,可是命令行交互仍然有着它不可替代的地位。转载 2015-07-08 11:48:49 · 2866 阅读 · 0 评论 -
应用 Command 模式进行流水号管理的最佳实践
本文介绍了一种基于自定义格式字符串, 应用 Command 模式的流水号管理功能,可以让用户灵活设定流水号的格式,具备非常好的灵活性和可扩展性。摘要流水号管理作为很多信息系统的一种基础功能,对于一些具有业务含义的流水号,一般由多个具有不同意义的组成部分组成,其格式会相对比较复杂,如何快速灵活的支持不同的流水号格式,十分有现实意义。本文介绍了一种基于自定义格式字符串,应用 C转载 2015-07-08 11:11:02 · 1062 阅读 · 1 评论 -
适配器模式原理及实例介绍
本文首先介绍了适配器模式的基本实现原理,然后通过一个实例让读者从代码的角度快速了解适配器模式的运行方式,接着对适配器模式在 JDK 中的应用做了一些介绍,最后对适配器模式的两种实现方式区别、优缺点、应用场景等做了一定的总结。适配器模式基本介绍著名的设计模式“四人帮”这样评价适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接转载 2015-07-08 10:22:47 · 5704 阅读 · 0 评论 -
Java 理论与实践: 用动态代理进行修饰
动态代理是构建 Decorator 和 Adapter 的方便工具动态代理工具 是 java.lang.reflect 包的一部分,在 JDK 1.3 版本中添加到 JDK,它允许程序创建 代理对象,代理对象能实现一个或多个已知接口,并用反射代替内置的虚方法分派,编程地分派对接口方法的调用。这个过程允许实现“截取”方法调用,重新路由它们或者动态地添加功能。本期文章中,B转载 2015-07-08 13:07:49 · 436 阅读 · 0 评论 -
Java Builder模式 初体验
Java编程模式之Builder模式转载 2016-04-19 11:15:52 · 581 阅读 · 0 评论 -
代理(Proxy) in Java
什么是代理?代理是指,本该有A做的工作,现在找一个代理人B,然后由B来进行实际的工作。代理,简单来分,可以分为以下两类:静态代理动态代理静态代理以实现两个数的加法场景为例:public interface IAdd { public int add(int a, int b);}实现类:public class Add implements IAdd转载 2014-12-18 14:38:36 · 553 阅读 · 0 评论 -
解释器(interpreter) in Java
定义:解释器模式是一种按照规定语法进行解析的方案,在现在项目中使用较少。正式定义:给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语句中的句子。解释器模式有以下几个角色:AbstractExpression抽象解释器 具体的解释任务由各个实现类完成。TerminalExpression终结符表达式 实现与文法中的元素相关联的解释操作,通常一个解释转载 2014-12-18 14:33:36 · 614 阅读 · 0 评论 -
工厂(factory) in Java
工厂模式,直接按名字来说,就是负责专门生产产品的。 大致分为3类:工厂方法简单工厂抽象工厂同时,也有人认为简单工厂只是工厂方法的一种特列,那么就分为两种了。本文就按3种分别进行介绍了。工厂方法定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法让一个类的实例化延迟到其子类。简单的说,就是有一个抽象类定义了一个方法,而实现类来决定到底初始化那个实例。这些实转载 2014-12-18 14:26:02 · 339 阅读 · 0 评论 -
中介者(mediator) in Java
定义:中介者模式,用一个中介对象封装一系列的对象交互,中介者使各对象不需要显式的相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互.相关角色Mediator抽象中介者角色 抽象中介者角色定义统一的接口,用于各个角色之间的通信.Concrete Mediator具体中介者 具体中介者角色通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色.Colleague同事转载 2014-12-18 14:28:39 · 363 阅读 · 0 评论 -
策略(strategy) in Java
定义:策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(Policy Pattern)。定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。策略模式有3个角色:Context封装角色 它叫上下文角色,起承上启下封装的作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。Strategy抽象策略角色 策略、算法的家族的抽象,通常为接转载 2014-12-18 14:30:20 · 501 阅读 · 0 评论 -
状态(state) in Java
定义:当一个对象内在状态改变时允许其改变行为,这个对象看起来想改变了其类。 状态模式的核心是封装,状态的变更引起了行为的变更,从外部看起来就好像这个对象对应的类发生了改变一样。状态模式有3个角色:State抽象状态角色 接口或抽象类,负责对象状态定义,并且封装环境角色以实现状态转换。ConcreteState具体状态角色 每一个具体状态必须完成2个职责:本状态的行为管理以及转载 2014-12-18 14:31:12 · 3040 阅读 · 0 评论 -
享元(flyweight) in Java
定义:享元模式(Flyweight Pattern)是池技术的重要实现方式。使用共享对象可有效地支持大量的细粒度的对象。享元模式提出了2个要求:细粒度的对象和共享对象。 要求细粒度对象,那么不可避免地使用对象数量多且性质相近。可以将这些对象分为2个部分:内部状态(intrinsic) 内部状态是对象可共享出来的信息,存储在享元对象内部并且不会随环境改变而改变。它们可以作为一个对转载 2014-12-18 14:35:16 · 467 阅读 · 0 评论 -
桥接(bridge) in Java
定义:Bridge 模式又叫做桥接模式,是构造型的设计模式之一。Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,从而可以保持各部分的独立性以及应对它们的功能扩展。为什么要使用桥接模式?场景:我们想绘制矩形、圆形、椭圆形、正方形,我们至少需要4个转载 2014-12-18 14:37:01 · 576 阅读 · 0 评论 -
原型(prototype) in Java
定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。基本上,可以就是一个clone方法,通过这个方法进行对象的拷贝。Java中的原型模式:public class ProtoTypeClass implements Cloneable { @Override public ProtoTypeClass clone(){ ProtoTyp转载 2014-12-18 14:20:47 · 361 阅读 · 0 评论 -
构建者(builder) in Java
定义:建造者模式,又叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 适用性:a.当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式. b.当构建过程必须允许构造的对象有不同的表示.构建者模式的核心思想:将一个“复杂对象的构建算法”与它的“部件及组装方式”分离,使得构件算法和组装方式可以独立应对变化;复用同样的构转载 2014-12-18 14:27:46 · 443 阅读 · 0 评论 -
访问者(visitor) in Java
定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。访问者模式有以下几个角色:Visitor抽象访问者 抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就visit方法的参数定义哪些对象是可以被访问的。ConcreteVisitor具体访问者 它影响访问者访问到一个类后该怎么办,要做什么事情。Element抽象元转载 2014-12-18 14:29:25 · 390 阅读 · 0 评论 -
空对象(null Object) in Java
相信大家一定在开发中见过并且写过类似这样的代码:public Book getBook(int id) { if (id < 0) { return null; } return new Book(1, "Design Pattern", 100); } Book book = getBook(-1); if (book !转载 2014-12-18 14:32:07 · 1006 阅读 · 0 评论 -
门面(Facade) in Java
定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 就是说,Facade提供了一个统一的接口,掩盖下层系统的复杂性,用户用起来更加的方便。以医院的例子,做个比喻:在无接待员的时候,病人要做业务,好复杂啊,好累!有了接待员,各种就医流程好流畅的说。因为有接待员与各个部门打交道。这个例子很好的说出了faca转载 2014-12-18 14:22:22 · 421 阅读 · 0 评论 -
模板方法(template Method) in Java
定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义这个算法的某些特定步骤。简单的说,就是你首先定义一下算法的各部分之间的执行顺序或者调用关系,然后在子类中实现具体每一部分是如何实现的。采用什么算法作为例子呢?就是用把动物放进冰箱这个算法吧。先定义一个抽象类:public abstract class AbstractAlgor转载 2014-12-18 14:24:01 · 424 阅读 · 0 评论 -
备忘录(memento) in Java
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式有以下三个角色:Originator发起人角色 记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。Memento备忘录角色 负责存储Originator发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。C转载 2014-12-18 14:32:52 · 373 阅读 · 0 评论 -
JAVA中的观察者模式实例教程
原文链接 作者:Pankaj Kumar 译者:f0tlo 校对:方腾飞观察者模式是一种行为设计模式。观察者模式的用途是,当你对一个对象的状态感兴趣,希望在它每次发生变化时获得通知。在观察者模式中,观察另外一个对象状态的对象叫做Observer观察者,被观察的对象叫着Subject被观察者。根据GoF规则,观察者模式的意图是:定义对象之间一对多的依赖关系,一个对象状态改变转载 2016-05-12 11:29:02 · 350 阅读 · 0 评论