设计模式
yx0628
这个作者很懒,什么都没留下…
展开
-
设计模式——单例模式
单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式(线程不安全):public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (i原创 2014-05-15 10:55:12 · 750 阅读 · 0 评论 -
设计模式——组合模式
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构, 使得用户对单个对象和组合对象的使用具有一致性。 示例代码:// 抽象组件public abstract class Component { public void method(){ // 共有的业务逻辑 }}// 非叶子节点public class Composite exte原创 2018-01-30 18:26:24 · 168 阅读 · 0 评论 -
设计模式——适配器模式
适配器模式,将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 UML类图: 示例代码:// 目标角色public interface Target { // 目标角色的方法 public void request();}// 目标角色的一个具体实现类public class Concrete原创 2018-01-30 10:35:44 · 156 阅读 · 0 评论 -
设计模式——责任链模式
责任链模式,使多个对象都有机会处理请求, 从而避免了请求的发送者和接受者之间的耦合关系。 将这些对象连成一条链, 并沿着这条链传递该请求, 直到有对象处理它为止。 在责任链模式中一个请求发送到链中后, 前一节点消费部分消息, 然后交由后续 节点继续处理。 实例代码:// 处理等级public class Level {}// 请求类public class Request原创 2018-01-29 18:01:10 · 190 阅读 · 0 评论 -
设计模式——命令模式
命令模式是一个高内聚的模式,将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请 求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 1.Receive接收者角色 该角色就是干活的角色,命令传递到这里是应该被执行的。 2. Command命令角色 需要执行的所有命令都在这里声明。 3. Invoker调用者角色 接收到命令,并执行命令。 示例代码如下:/原创 2018-01-27 21:16:26 · 151 阅读 · 0 评论 -
设计模式——代理模式
代理模式代理模式,为其他对象提供一种代理以控制对这个对象的访问。 代理模式的三种角色: 1. 抽象业务角色,抽象类或者接口; 2. 真实业务角色,继承或实现抽象业务角色,是业务的真正执行者。 3. 代理角色,控制真实业务角色,抽象类的方法,在真实业务角色中实现,可以在真实角色执行方法的过程前后加入预处理或者结束后的处理方法。// 抽象业务角色public abstract c原创 2018-01-26 14:29:55 · 227 阅读 · 0 评论 -
设计模式——抽象工厂模式
抽象工厂可以看作是工厂方法模式的升级版,在有多个业务品种,业务分类时,使用抽象工厂模式比较合适。比如一个工厂,可以生产 A,B 两种不同的产品,且均有普通和高端两种品质之分。实例代码如下:// A产品的抽象类public abstract class AbstractProductA { public void share(){ // 每个产品共有方法原创 2018-01-23 11:15:24 · 142 阅读 · 0 评论 -
设计模式——中介者模式
中介者模式,用一个中介对象来封装一系列的对象交互。中介者使得各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。 示例代码:// 抽象中介者public abstract class Mediator { // 抽象调度方法,在具体实现类中实现调度逻辑 public abstract void contact(String content, Colle原创 2018-02-02 14:31:15 · 140 阅读 · 0 评论 -
设计模式——策略模式
在看本文之前,强烈建议大家先看看这篇文章:Java策略模式 ,其中的例子十分生动,也十分清晰,不过在评论中对是策略模式还是状态模式产生了争议。下面完整的说一说策略模式,其实策略模式最重要的前提是:策略模式的客户端环境(Context)必须知道所有的策略类、理解这些不同策略类算法之间的区别,并自行决定使用哪一个策略类来完成业务逻辑。 策略模式:针对一组算法或行为特性,将它们抽象到具有共原创 2014-03-26 17:39:34 · 710 阅读 · 0 评论 -
设计模式——门面模式
门面模式,要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。 门面模式提供一个高层次的接口, 使得子系统更易于使用。 系统中各个模块,统一在门面中对外提供访问。 示例代码:// 模块Apublic class ClassA { public void methodA(){ // 具体业务逻辑 }}// 模块Bpublic class原创 2018-01-31 17:04:45 · 192 阅读 · 0 评论 -
设计模式——备忘录模式
备忘录模式, 在不破坏封装性的前提下, 捕获一个对象的内部状态, 并在该对象之外保存这个状态。 这样以后就可将该对象恢复到原先保存的状态。 两种角色: - Originator 待备份的对象,负责创建和恢复备份数据 - Memento 备忘录对象,记录并储存对象中的属性等 示例代码:// 备忘录角色public class Memento { // 属性原创 2018-02-01 13:15:14 · 256 阅读 · 0 评论 -
设计模式——访问者模式
访问者模式,封装一些作用于某种数据结构中的各元素的操作, 它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 是一种分离对象数据结构与行为的方法,通过这种分离,可为一个被访问者动态添加新的操作而无需对数据结构本身进行修改。 示例代码:// 访问目标public interface ISubject { // 接受访问者访问 public void acc原创 2018-02-01 13:42:48 · 274 阅读 · 0 评论 -
设计模式——工厂方法模式
工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实现延迟到其子类。 示例代码如下:// 抽象产品类代码public abstract class Product { public void method1(){ // 公共方法 } // 抽象方法 public abstract void method2();}//原创 2018-01-22 16:57:41 · 174 阅读 · 0 评论 -
设计模式——观察者模式
观察者模式也叫发布订阅模式,定义对象间的一种一对多的关系,使得每当一个对象改变状态,则所有依赖于它的对象都会收到通知并自动更新。 四种角色: - Subject 被观察者,能够动态的添加和取消观察者,管理观察者并通知观察者。 - Observer 观察者,观察者收到通知后,执行自己的操作,对消息进行处理。 - ConcreteSubject 具体的被观察者,定义被观察者具体的业务逻辑。原创 2018-01-31 00:33:00 · 175 阅读 · 0 评论 -
设计模式——模板方法模式
在开发中,如果遇到某个方法的实现需要调用多个方法,这些方法有些是固定不变的,有些是发生变化的,就可以采用模板方法模式。将每个步骤对应的方法作为基本方法,而调用这些方法同时定义步骤顺序的方法称为模板方法。 模板方法模式的定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 基本方法也叫做基本操作,是由子类实现的方法,原创 2018-01-23 22:03:38 · 154 阅读 · 0 评论 -
设计模式——建造者模式
建造者模式是指将一个“复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示“。 “复杂对象的构建和它的表示分离”可以理解成一辆汽车,无论使用何种品牌的部件,只要能正常安装即可。 “使得同样的构建过程可以创建不同的表示”即同样的部件可采取多种安装方式。 建造者模式由四个角色组成: (1)Builder(抽象建造者角色)原创 2014-03-27 13:05:47 · 912 阅读 · 0 评论 -
设计模式——原型模式
建造者模式也叫生成器模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。// 产品类public class Product { public void doSomething(){ // TODO }}// 抽象建造者public abstract class Builder { public abstract void setP原创 2018-01-24 22:40:28 · 258 阅读 · 0 评论 -
设计模式——桥接模式
桥接模式,将抽象和实现解耦, 使得两者可以独立地变化。桥接模式能够保证各个承担不同业务的行为类的独立性,同时也能对行为类的方法进行扩展。 示例代码:// 业务类的接口public interface Implementor { // 业务方法 public void operation();}// 具体业务类Apublic class ConcreteImp原创 2018-02-02 10:58:52 · 237 阅读 · 0 评论 -
设计模式——状态模式
状态模式,通过状态变更促使行为的变化。// 环境类public class Context { // 两种状态会互相切换 public static final State STATE1 = new ConcreteState1(); public static final State STATE2 = new ConcreteState2(); // 当前原创 2018-02-01 15:51:15 · 180 阅读 · 0 评论 -
设计模式——装饰者模式
首先来看一个例子: 比如,饮料可以分为很多种类,而这里我取一个咖啡,那么这个咖啡呢,有多种形式的,比如有加糖了的咖啡,有加奶的咖啡,也有加热了的咖啡,也有加了冰块的咖啡。 而各个顾客的选择却是不同的,比如,有的客户是要加糖的咖啡,而有的客户却是要加冰的咖啡,也就是需求是各种各样的,那么如何实现这种情况呢?先来看一种愚笨的做法,那就是你可以通过继承来实现:转载 2014-03-25 10:02:14 · 775 阅读 · 3 评论