
Java设计模式
心歌技术
认知迭代命运
展开
-
Java设计模式之享元模式
享元模式(flyweight)概念: 主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销。 适用: 1.一个应用程序使用了大量的对象。 2.完全由大量的对象,造成很大的存储开销。 3.对象的大多数状态都可变为外部状态。 4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。 5.应用程序不依赖于对象标识,由于Flyweight对象可以被共享,对原创 2017-09-14 09:08:44 · 598 阅读 · 1 评论 -
Java设计模式之模板方法模式
模板方法(template method)概念: 把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。适用: 1. 具有统一的操作步骤或操作过程 2. 具有不同的操作细节 3. 存在多个具有同样操作步骤 的应用场景,但某些具体的操作细节各不相同。代码示例:public abstract class MakeVehicle { pub原创 2017-09-17 11:58:47 · 505 阅读 · 0 评论 -
Java设计模式之访问者模式
访问者模式(visitor)概念: 分离对象的数据和行为,可以实现不修改已有类的情况下,增加新的操作[访问者]。适用: 1一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。 2 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。Visitor使得你可以将相关的操作集中起来定义在一个类中。 3 当该对象原创 2017-09-17 12:13:10 · 514 阅读 · 0 评论 -
Java设计模式之普通工厂模式
静态工厂/普通工厂(factory)概念: 由一个工厂对象决定创建出哪一种产品类的实例优点: 外界可以不用直接创建具体产品对象,仅仅需要负责“消费”对象就可以了,而不必管这些对象究竟如何创建及如何组织的适用: 出现了大量的产品需要创建,并且具有共同的接口,希望由实现了该接口的类来指定它所创建的对象的时候时,可以通过工厂方法模式进行创建。示例代码: /** * 交通工具的接口 * 相当于P原创 2017-09-08 22:15:38 · 471 阅读 · 0 评论 -
Java设计模式之建造者模式
**建造者模式(builder)** 概念: 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]适用: 1.当创建复杂对象的算法应该独立于该对象的组成部分及他们的装配方式时。 2.当构造过程必须允许被构造的对象有不同的表示时。 3.在Java的应用中JavaMail使用到了该模式。与工程模式的区别: 在建造者模式里,有个指导者,由指原创 2017-09-09 17:08:04 · 338 阅读 · 0 评论 -
Java设计模式之责任链模式
责任链模式(chain of responsibility)概念: 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链;并沿着这条链传递该请求,直到有一个对象处理它为止。在这个链上的所有的对象有相同的接口(抽象类)但却有不同的实现 优点: 在隐瞒客户端的情况下,对系统进行动态的调整 适用: 1.有多个的对象可以处理一个原创 2017-09-12 00:53:27 · 537 阅读 · 0 评论 -
Java设计模式之命令模式
命令模式(command)概念: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的动作。 优点: 1、命令模式将发出请求的对象和执行请求的对象解耦 2、在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或一组动作 3、调用者通过调用命令对象的execute()发出请求,这会使得接收者的动作被调用 适用: 抽原创 2017-09-12 01:03:18 · 297 阅读 · 0 评论 -
Java设计模式之组合模式
组合模式(composite)概念:将对象组合成树形结构以表示”部分-整体”的层次结构。”Composite”使得用户对单个对象和组合对象的使用具有一致性 适用: 1.想用部分-整体结构层次。 2.希望用户忽略组合对象与单个对象的不同,用户将统一的使用组合结构中的所有对象。 示例代码:/** *Component接口 */public abstract class Component{原创 2017-09-12 21:20:29 · 326 阅读 · 0 评论 -
Java设计模式之装饰模式
装饰模式(decorator)概念:装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。 适用: 1、需要扩展一个类的功能。 2、动态的为一个对象增加功能,而且还能动态撤销。装饰模式与代理模式的区别: 装饰模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。用代理模式,代理类(p原创 2017-09-12 21:28:21 · 348 阅读 · 0 评论 -
Java设计模式之外观模式
外观模式(facade)概念: 外观模式就是将类与类之间的关系放在一个Facade类中,降低了类类之间的耦合度。 优点: 类与类之间的关系放在一个Facade类中,起到了解耦的作用 适用: 1.客户端程序与抽象类的实现部分存在着很大的依赖性。引入Facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。 2.当你需要构建一个层次结构的子系统时,原创 2017-09-12 21:59:05 · 481 阅读 · 0 评论 -
Java设计模式之抽象工厂模式
抽象工厂(abstract factory)概念:指当有多个抽象角色时,使用的一种工厂模式; 抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象 优点: 1.隔离了具体类的生成,使得客户不需要知道什么被创建了 2.当一个产品族中的多个对象被设计成一起工作时,能保证客户端始终只使用一个产品族中的对象 适用: 1.一个系统要独立于它的产品的原创 2017-09-08 20:12:35 · 410 阅读 · 0 评论 -
Java设计模式之单例模式
单例模式(singleton)概念: 保证一个类仅有一个实例,并提供一个访问它的全局访问方法优点: 1、控制实例产生的数量,达到节约资源的目的 2、控制资源的使用,通过线程同步来控制资源的并发访问 3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信适用: 1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 2.原创 2017-09-08 21:51:23 · 454 阅读 · 0 评论 -
Java设计模式之解释器模式
解释器模式(interpreter)概念: 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。 (1)抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法,称做解释操作。 (2)终结符表达式(Terminal Expression)角色:实现了抽象表达式角色所要求的接原创 2017-09-14 09:21:18 · 636 阅读 · 1 评论 -
Java设计模式之迭代器模式
迭代器模式(iterator)概念: 提供一种一致的方法来顺序遍历一个容器中的所有元素适用: 1.访问一个聚合对象的内容而无需暴露它的内部表示。 2.支持对聚合对象的多种遍历。 3.为遍历不同的聚合结构提供一个统一的接口(即,多态迭代)。 迭代器模式的优缺点迭代器模式的优点: 简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但用户需要在原创 2017-09-14 09:35:40 · 682 阅读 · 1 评论 -
Java设计模式之中介者模式
中介者模式(mediator)概念: 中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护;修改一个对象,其它关联的对象都得进行修改;如果使用中介者模式,只需关心和Mediator类的关系,具体类类之间的关系及调度交给Mediator就行 适用: 1.一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。 2.一个对象引用很原创 2017-09-15 15:10:22 · 726 阅读 · 0 评论 -
Java设计模式之备忘录模式
备忘录模式(memento)概念: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态适用: 1.必须保存一个对象在某一时刻(部分)的状态,这样以后需要时它才能恢复到先前的状态。 2.如果用一个接口来让其他对象直接得到这个状态,将会暴露对象的实现细节并破坏对象的封装性。 代码示例:/** * 备忘录类 * 负责存储Orig原创 2017-09-15 15:34:58 · 696 阅读 · 1 评论 -
Java设计模式之观察者模式
观察者模式(observer)概念: 当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。 适用: 1.当一个对象有两个方面,其中一个方面依赖于另一个方面。将二者封装在独立的对象中以使他们可以各自独立的改变和复用。 2.当一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变。 3.当一个对象必须通知其他对象,而又不能假定其他对象是谁。原创 2017-09-15 15:44:04 · 618 阅读 · 0 评论 -
Java设计模式之代理模式
代理模式(proxy)概念: 为其他对象提供一种代理以控制对这个对象的访问。优点: 能生成任意接口的代理对象,实现任意的代理适用: 1. 控制对一个对象的访问权限,用于对象有权限设置的时候 2. 动态添加日志记录静态代理:/** *移动接口 */public interface Moveable { public void move(); }/** * 被代理类 */p原创 2017-09-16 21:19:31 · 414 阅读 · 0 评论 -
Java设计模式之状态模式
状态模式(state)概念: 这个模式允许你可以在运行时很容易地根据自身内部的状态改变对象的行为适用: 1.当一个对象的转换条件表达式过于复杂时,通常这个状态由一个或者多个枚举表示,通常有多个操作包含这一相同的的条件结构,state模式将一个条件分支放到一个类中,这使得你可以根据对象自身的情况将对象的状态作为对象,这一对象不依赖于其他对象而独立变化,把状态的判断逻辑放到表示不同状态的一系列类中。原创 2017-09-16 22:07:21 · 422 阅读 · 0 评论 -
Java设计模式之策略模式
策略模式(strategy)概念: 定义一组算法,并把其封装到一个对象中。然后在运行时,可以灵活的使用其中的一个算法。适用: 1.多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。 2.需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。 3.对客户隐藏具体策略(算法)的实现细节,彼此完全独立。代码示例:/** * 所有策原创 2017-09-16 22:29:50 · 397 阅读 · 0 评论 -
Java中常用设计模式
java的设计模式大体上分为三大类:创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。设计模式遵循的原则有6个原创 2018-03-09 10:24:02 · 470 阅读 · 0 评论