标签:style c class blog code java
模板方法模式Template Method Pattern 定义一个操作的算法的框架,是的子类可以不改变算法结构即可重定义该算法一些特定步骤 public abstract class AbstractClass{//抽象模板类 protected abstract void method1();//算法步骤1 protected abstract void method2();//算法步骤2 public void templateMethod(){//模板方法,定义算法结构 this.method1();this.method2(); } } public class ConcreateClass extends AbstractClass{//具体模板类 protected void method1(){} protected void method2(){} } 封装不变部分(模板方法),扩展可变部分(算法步骤) 行为由父类控制,子类实现 建造者模式Builder Pattern 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 //产品类 public class Product{ public void method(){} } //抽象建造者 public abstract class Builder{ public abstract void setPart();//产品类逻辑处理 public abstract Product buildProduct(); } //具体建造者 public c1ass ConcreateBulider extends Builder{ private Product product = new Product(); public void setPart(){} public Product buildProduct(){return product;} } //产品构建类 public class Direct{ private Builder builder = new ConcreateBulider(); public Product getAProduct(){//构建不同产品 builder.setPart(); //产品逻辑处理 return builder.buildProduct(); } } 建造者模式关注的是产品类零件类型和装配顺序,这是它与工厂方法模式最大的不同。 建造者模式最主要的功能是基本方法的调用顺序安排,顺序不同产生对象不同。 代理模式Proxy Pattern 为其他对象提供一种代理以控制对这个对象得访问 其他许多模式,如状态模式,策略模式,访问者模式本质上都是在特殊场合采用得代理模式 //抽象主题类 public interface Subject{ public void request();//定义访问方法 } //真实主题类 public class ReadSubject extends Subject{ public void request(){}//真实访问方法 } //代理类 public class Proxy extends Subject{ private Subject subject = null;//要代理的类 public Proxy(Proxy subject){this.subject=subject}//要代理类 public void request(){subject.request();}//代理实现访问 } 职责清晰,高扩展性,智能化 代理模式扩展 普通代理,客户端只能访问代理角色,不能访问真实角色,真实角色在代理类中被创建,无法在客户端单独创建 Subject subject = new SUbject(this,...);//Proxy类 调用者只知代理而不用知道真实角色,屏蔽了真实角色对高层模块得影响 强制代理,通过真实角色查找代理角色,在真实角色类中创建代理对象,在真实角色类的访问方法中检验代理 虚拟代理,在代理类得每个访问方法中判断真实类是否初始化,如没有,则初始化 动态代理,运行阶段才指定代理对象,使用反射机制(重点) 原型模式Prototype Pattern 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象 核心是实现clone方法,完成对对象得拷贝,实现Cloneable接口,实现clone方法的覆盖(继承自Object) public class PrototypeClass implements Cloneable{ @Override public PrototypeClass clone(){ PrototypeClass proto = null; try{ proto = (PrototypeClass)super.clone(); }catch(CloneNotSupportedException e){} return proto; } } 原型模式是内存二进制流的拷贝,比new一个对象性能好,构造函数不会执行 浅拷贝,深拷贝。Object提供的方法clone只是拷贝对象,其内部的数组,引用对象都不拷贝,还是指向原来的地址。深拷贝可以通过对内部数组,引用进行再次拷贝来实现 中介者模式Mediator Pattern 用一个中介对象封装一系列对象交互,使各对象不需要显示地相互作用,从而使耦合松散,可以独立改变他们之间得交互 //通用抽象中介类 public abstract class Mediator{ protected Colleague1 c1; protected Colleague2 c2; //实现setter/getter方法把同事类注入,依赖注入 public abstract void doSomething(); } //通用中介类 public class ConcreteMediator{ public void doSomething(){ super.c1.method1(); super.c2.method2(); } } //抽象同事类 public abstract Colleague(){ protected Mediator mediator;//中介 public Colleague(Mediator mediator){this.mediator=mediator;} } //同事类1 public class Colleague1(){ public Colleague1(Mediator mediator){super(mediator);} public method1(){}//自己的业务逻辑 public depMethod1(){ //内部逻辑 super.mediator.doSomething();//交互业务 }//中介处理 } public class Colleague2(){ public Colleague2(Mediator mediator){super(mediator);} public method2(){}//自己的业务逻辑 } 减少类间依赖,降低类间耦合 命令模式Command Pattern 将请求封装成对象,对请求排队或者写入日志,从而提供撤销恢复功能 //通用Receiver类 public abstract class Receiver{//执行方 public abstract void doSomething();//业务功能 } //具体Receiver类 public class ConcreteReceiver extends Receiver{//具体执行方 public void doSomething(){} } //抽象Command类 public abstract class Command{//抽象命令类 public abstract void execute();//执行命令的方法 } //具体Command类 public class ConcreateCommand extends Command{//具体命令类 private Receiver receiver; public ConcreateCommand(Receiver receiver){this.receiver=receiver;} public void execute(){this.receiver.doSomething();//实现命令} } //调用者Invoke类 public class Invoke{ private Command command; public Invoke(Command command){this.command=command;} public void action(){this.command.execute();//执行命令} } 请求方和执行方之间没有任何依赖关系,高度封装 命令易于扩展 命令模式的撤销恢复功能,执行方增加一个rollBack()方法用于对任务进行回滚,同时添加命令的撤销命令,调用回滚方法。
设计模式小计——23种设计模式2,布布扣,bubuko.com
标签:style c class blog code java
原文地址:http://www.cnblogs.com/MrBruce/p/3754438.html