随笔分类 - 设计模式
摘要:静态代理比较简单,就是代理对象与被代理对象继承相同的接口,代理类负责调用被代理类(委托类)的对象的相关方法去提供具体的服务,一个代理类只能为一个接口服务,要是有很多服务的话需要开很多代理类。而动态代理则是由反射实现,可以用一个代理类实现所有的代理功能,这点是比较方便的。 先看看静态代理: 一个接口类
阅读全文
摘要:状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。 策略模式和状态模式有点相似,区别就是状态模式是行为改变状态,主要在于状态改变行为的应用场景,而策略模式则是采用哪种算法,让Con
阅读全文
摘要:备忘录模式存在的意义在于在程序里面我们可能会遇到撤销操作的问题,将对象恢复到某个状态。类似事务的回滚。备忘录模式主要有三个对象发起人(Originator):要备份的成员,它提供一个创建备忘录的方法,将自身的信息复制到备忘录中,并提供另一个方法将备忘录中信息覆盖自身信息。备忘录(Memento):备...
阅读全文
摘要:命令模式,显而易见,是将命令和实际操作相隔离,解耦合,客户端只发出命令,具体的操作不需要关心,只需要完成任务。举个很简单的例子,用户点菜,然后厨师做菜,根据点菜的口味不同厨师做不同的菜,一般来说,主要有三个对象一个是抽象接口类,用于封装命令执行方法。一个命令执行类(invoker):这个类主要将具体...
阅读全文
摘要:责任链模式是对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式强调的是每一个对象及其对下家的引用来组成一条链,利用这种方式将发送者和接收者解耦。 责任链模式还是很好理解的,责任链模式
阅读全文
摘要:顺序访问聚集中的对象,主要用于集合中。一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。 迭代子模式为遍历集合提供了统一的接口方法。从而使得客户端不需要知道聚集的内部结构就能就能对聚集进行遍历等操作。Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同...
阅读全文
摘要:观察者模式也称为订阅发布模式,比较好理解,就是订阅发布这几个步骤,发布的时候可以选择删除增加和通知订阅人。看代码抽象主题,包含增加删除通知功能抽象接口package watcher;/** * 抽象主题,接口包含增加删除通知观察者功能,类似订阅内容。 * @author mercy * */publ...
阅读全文
摘要:模板方法比较好理解,就是为了避免代码冗余,实现代码复用的功能。比如说最常见的泡茶和泡咖啡,两个之间有很多共同点,都需要烧水,都需要把水倒入杯中,那么这些重复的方法可以抽离出来,放在父类当中,至于两者之间不同的方法,写一个抽象类,让不同的子类去重写父类即可。代码模板类package template;...
阅读全文
摘要:策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。策略模式的好处在于你可以动态的改变对象的行为。策略模式主要有三个对象:抽象策略对象(它可由接口或抽象类来实现。),具体策略对象(它封装了实现同不功能的不同算法。),环境对象(该类中实现了对...
阅读全文
摘要:原型模式也是创建型的设计模式,通过拷贝原型创建新的对象,理解原型模式必须理解java中的浅复制和深复制。复制也称为克隆。会发生深拷贝的有java中的8中基本类型以及他们的封装类型,另外还有String类型。其余的都是浅拷贝。浅克隆:浅克隆仅仅克隆所考虑的对象,而不克隆它所引用的对象。深克隆:深克隆不...
阅读全文
摘要:建造者模式使用场景:将复杂的实现与应用进行分离。主要有四个类:产品类(Product)、建造抽象类(Builder)、建造实现类(ConcreteBuilder)、指挥者类(Director)。建造者模式仅仅只比工厂模式多了一个“指挥类”的角色。在建造者模式图中,假如把这个指挥类看做是最终调用的客户...
阅读全文
摘要:单例模式保证一个类中只有一个实例且该实例易于外界访问。 懒汉模式(实现了懒加载,不需要同步的情况下效率低) 饿汉模式(基于classloder机制避免了多线程的同步问题) 懒汉模式和饿汉模式都是在类初始化即实例化instance 双重锁模式 静态内部类(classloder的机制来保证初始化inst
阅读全文
摘要:软件设计的要点是高内聚低耦合,而工厂模式则满足了这个要求,工厂模式分为三种:简单工厂模式(静态工厂类),工厂方法模式,抽象工厂模式。先上代码简单工厂模式1)工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。2)抽象产品角色:它一般是具体产品继承的父类或者...
阅读全文
摘要:当一个应用中使用了大量的对象,会造成内存开销大,对象的大部分状态和参数(内部状态)都是相同的时候,可以使用享元模式。使用享元模式可以使这些对象都共享相同的实例。降低存储开销,而对象之间的不同的状态参数(外部状态)则使用外部参数传入来实现。单纯的享元模式涉及到的角色主要有三个。抽象享元角色:给出一个抽...
阅读全文
摘要:定义 组合模式(Composite),将对象组合成树形结构以表示‘部分-整体’的层次关系(树状结构)。组合模式使得用户对单个对象和组合对象使用具有一致性。意图 希望用户可以忽略单个对象和组合对象的区别,统一使用组合结构中的所有对象(封装变化的思想)。结构图图1组合模式(Composite)结构图参与...
阅读全文
摘要:应用场景:抽象部分与实现部分分离,使它们都可以独立的变化。创建一个抽象类:package bridge;public abstract class Abstraction { protected Interfacor interfacor; public Abstraction(Interfaco...
阅读全文
摘要:外观模式主要应用场景在于为复杂的子系统提供一个简单的接口,提高子系统的独立性。 创建DrawerOne类: package facade; public class DrawerOne { public void open() { System.out.println("第一个抽屉被打开了"); g
阅读全文