随笔分类 - 设计模式
摘要:享元模式 通过对象的复用来减少对象创建的次数和数量,以减少系统内存的使用和降低系统的负载。在系统需要一个对象时,享元模式首先在系统中查找并尝试重用现有的对象,如果未找到匹配的对象,则创建新对象并将其缓存在系统中以便下次使用。 (1)定义Memory public class Memory{ priv
阅读全文
摘要:解释器模式给定一种语言,并定义该语言的语法表示,然后设计一个解析器来解释语言的语法,这种模式长用于SQL解析、符号处理引擎等。 正则表达式解释器: (1)定义Expression public interface Expression { public void interpret(Context
阅读全文
摘要:中介者模式 对象和对象直接不直接交互,而是通过一个中介者来实现对象之间的交互。使原有对象之间的关系变得松散,且可以通过定义不同的中介者来改变他们之间的交互。 (1)定义房东 public class Landlord{ private final static Log logger = LogFac
阅读全文
摘要:访问者模式将数据和对数据的操作分离开来,使其在不改变数据结构的前提下动态添加作用于这些元素上的操作。它将数据结构的定义和数据操作的定义分离开来,符合“单一职责”原则。访问者模式通过定义不同的访问者实现对数据的不同操作,因此在需要给数据添加新的操作时只需为其定义一个新的访问者即可。 适用于数据结构稳定
阅读全文
摘要:备忘录模式 将当前对象的内部状态保存到备忘录中,以便在需要时能将改对象的状态恢复到原先保存的状态。 (1)定义备忘录 public class Memento{ private String value; public Memento(String value){ this.value = valu
阅读全文
摘要:命令模式将命令调用者与命令执行者解耦,有效降低系统的耦合度。同时,由于命令调用者和命令执行者进行了解耦,所以增加和删除命令变得非常方便。 (1)定义Command接口 public interface Command{ public void exe(String command); } (2)定义
阅读全文
摘要:责任链模式是一种非常有趣的模式。 责任链模式用于避免请求发送者与多个请求处理者耦合在一起,让所有请求的处理者持有下一格对象的引用,从而将请求串联成一条链,在有请求发生时,可将请求沿着这条链传递,直到遇到该对象的处理器。 (1)定义处理接口 public interface Handler{ void
阅读全文
摘要:迭代器模式提供了顺序访问集合对象中的各种元素,而不暴露该对象的内部结构的方法。 (1)定义集合 public interface Collection{ public Iterator iterator(); public Object get(int i); public boolean add(
阅读全文
摘要:又叫发布-订阅者模式,或者模型-视图模式。 在被观察者的状态发生变化时,系统基于事件驱动理论将其状态通知到订阅其状态的观察者对象中,以完成状态的修改和事件传播。 (1)定义抽象主题 public abstract class Subject{ protected List<Observer> obs
阅读全文
摘要:模板方法模式定义了一个算法框架,并通过继承的方式将算法的实现延迟到子类中,使得子类可以在不改变算法框架及流程的前提下重新定义改算法在某些环节的实现。 (1)定义模板类 public abstract class AbstractTemplate{ private final static Log l
阅读全文
摘要:状态模式指给对象定义不同的状态,并为不同的状态定义不通的行为,在对象的状态发生变换时自动切换状态行为。 状态模式把受环境改变的对象行为包装在不同的对象里,用于让一个对象在其内部状态改变时,行为也随之改变。 (1)定义抽象状态 public abstract class AbstractState{
阅读全文
摘要:策略模式为同一个行为定义了不同的策略,并为每种策略都实现了不同的方法。在用户使用时,系统根据不同的策略自动切换不同的方法来实现策略的改变。同一个策略下的不同方法是对同一功能的不同实现,因此在使用时可以相互替换而不影响用户的使用。 (1)定义策略模式接口 public interface Travel
阅读全文
摘要:桥接模式通过将抽象与实现解耦,使二者可以根据需求独立变化。 桥接模式主要用于解决在需求多变的情况下使用继承造成类爆炸的问题。 (1)定义接口 public interface Driver{ void executeSQL(); } (2)定义接口实现类 public class MysqlDriv
阅读全文
摘要:外观模式将多个子系统及其之间的复杂关系和调用流程封装到一个统一的接口或类中以对外提供服务。 示例: (1)定义子系统 public class DashBoard{ private final static Log logger = LogFactory.getLog(this.getClass()
阅读全文
摘要:代理模式指为对象提供一种通过代理的方式来访问并控制该对象行为的方法。在客户端不适合或者不能够直接引用一个对象时,可以通过该对象的代理对象来实现对该对象的访问。 (1)定义原类 public interface Company{ void findWorker(String title); } pub
阅读全文
摘要:装饰者模式指在无须改变原有类及类的关系的情况下,动态扩展一个类的功能。它通过装饰者来包裹真实的对象,并动态地向对象添加或者撤销功能。 (1)定义Sourceable接口 public interface Sourceable{ public void createComputer(); } (2)定
阅读全文
摘要:适配器模式适合用来解决不同系统之间的对接问题。 适配器模式通过定义一个适配器类作为两个不兼容的接口之间的桥梁,将一个类的接口转换成用户期望的另一个接口,使得两个或多个原本不兼容的接口可以基于适配器类一起工作。 1. 类适配器模式 在不改变原有接口或类结构的情况下扩展类的功能以适配不同的接口时,可以使
阅读全文
摘要:组合模式又叫部分整体模式(个人觉得叫部分整体模式更直观)。是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 文字说的啥我也没懂,看示例代码吧,代码比较容易懂: (1)定义TreeNode
阅读全文
摘要:原型模式以当前对象为原型(蓝本)来创建另一个新的对象,而无需知道创建的细节。 · 浅复制: 对象的基本数据类型的变量值会被重新复制和创建,而引用数据类型仍指向原对象的引用。也就是说,浅复制不复制对象的引用类型数据。 · 深复制:不论是基本数据类型还是引用数据类型,都会被重新复制和创建 (1)浅复制
阅读全文
摘要:建造者模式主要解决软件系统中复杂对象的创建问题,比如有些复杂对象的创建需要通过各部分的子对象用一定的算法构成,在需求变化时这些复杂对象将面临很大的改变,这十分不利于系统的稳定。但是,使用建造者模式能将他们各部分的算法包装起来,在需求变化后只需调整各个算法的组合方式和顺序,能极大提高系统的稳定性。建造
阅读全文

浙公网安备 33010602011771号