1、简单工厂模式简单工厂模式简单工厂模式包含如下角色:Factory:工厂角色Product:抽象产品角色ConcreteProduct:具体产品角色public void pay(String type) if(type.equalsIgnoreCase(cash) /现金支付处理代码 else if(type.equalsIgnoreCase(creditcard) /信用卡支付处理代码 else if(type.equalsIgnoreCase(voucher) /代金券支付处理代码 else 代码复杂,难以维护重构后的代码:public abstract class AbstractPay
2、 public abstract void pay(); public class CashPay extends AbstractPay public void pay() /现金支付处理代码 public class PayMethodFactory public static AbstractPay getPayMethod(String type) if(type.equalsIgnoreCase(cash) return new CashPay(); /根据参数创建具体产品 else if(type.equalsIgnoreCase(creditcard) return new Cr
3、editcardPay(); /根据参数创建具体产品 工厂方法模式工厂方法模式包含如下角色:Product:抽象产品ConcreteProduct:具体产品Factory:抽象工厂ConcreteFactory:具体工厂抽象工厂类代码:public abstract class PayMethodFactory public abstract AbstractPay getPayMethod();具体工厂类代码:public class CashPayFactory extends PayMethodFactory public AbstractPay getPayMethod() retur
4、n new CashPay(); 客户类代码片段:PayMethodFactory factory;AbstractPay payMethod;factory=new CashPayFactory();payMethod =factory.getPayMethod();payMethod.pay(); 抽象工厂模式抽象工厂模式包含如下角色:AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProduct:抽象产品Product:具体产品抽象工厂类的典型代码如下:public abstract class AbstractFactory public
5、 abstract AbstractProductA createProductA(); public abstract AbstractProductB createProductB();具体工厂类的典型代码如下:public class ConcreteFactory1 extends AbstractFactory public AbstractProductA createProductA() return new ConcreteProductA1(); public AbstractProductB createProductB() return new ConcreteProdu
6、ctB1(); 抽象产品类:Public abstract class AbsractProductA()/每个产品共有的方法Public void shareMethod()/每个产品相同方法,不同实现Public abstract void doSomething();具体产品A1:Public class ProductA1 extends AbstractProductAPublic void doSomething()System.out.println(“产品A1的实现方法”)具体产品A2:Public class ProductA2 extends AbstractProduct
7、APublic void doSomething()System.out.println(“产品A2的实现方法”)产品等级1:Public class Creator1 extends AbsractCreator/只生产产品等级为1的A产品Public AbstractPorductA creatProductA()Return new ProductA(); /只生产产品等级为1的B产品Public AbstractProductB creatProductB()Return new ProductB();原型模式原型模式包含如下角色:Prototype:抽象原型类ConcreteProt
8、otype:具体原型类Client:客户类Public PrototypeClass clone()overridePublic PrototypeClass prototypeClass=null;TryprototypeClass=(prototypeClass)super.clone();catch(CloneNotSupportedException e)Return prototypeClass;单例模式单例模式的实现代码如下所示:public class Singleton private static Singleton instance=null; /静态私有成员变量 /私有构
9、造函数 private Singleton() /静态公有工厂方法,返回唯一实例 public static Singleton getInstance() if(instance=null) instance=new Singleton(); return instance; 适配器模式类适配器对象适配器适配器模式包含如下角色:Target:目标抽象类Adapter:适配器类Adaptee:适配者类Client:客户类典型的类适配器代码:public class Adapter extends Adaptee implements Target public void request() s
10、pecificRequest(); 典型的对象适配器代码:public class Adapter extends Target private Adaptee adaptee; public Adapter(Adaptee adaptee) this.adaptee=adaptee; public void request() adaptee.specificRequest(); 桥接模式桥接模式包含如下角色:Abstraction:抽象类RefinedAbstraction:扩充抽象类Implementor:实现类接口ConcreteImplementor:具体实现类 典型的实现类接口代码
11、:public interface Implementor public void operationImpl(); 典型的抽象类代码:public abstract class Abstraction protected Implementor impl; public void setImpl(Implementor impl) this.impl=impl; public abstract void operation(); 典型的扩充抽象类代码:public class RefinedAbstraction extends Abstraction public void operati
12、on() /代码 impl.operationImpl(); /代码 外观模式观模式包含如下角色:Facade: 外观角色SubSystem:子系统角色典型的外观角色代码:public class Facade private SubSystemA obj1 = new SubSystemA(); private SubSystemB obj2 = new SubSystemB(); private SubSystemC obj3 = new SubSystemC(); public void method() obj1.method(); obj2.method(); obj3.method
13、(); 代理模式代理模式包含如下角色:Subject: 抽象主题角色Proxy: 代理主题角色RealSubject: 真实主题角色抽象主踢类:Public interface Subject/定义一个方法Public void request();Public class RealSubject implements SubjectPublic void request()典型的代理类实现代码:public class Proxy implements Subject private RealSubject realSubject = new RealSubject(); public vo
14、id preRequest() . public void request() preRequest(); realSubject.request(); postRequest(); public void postRequest() 命令模式命令模式包含如下角色:Command: 抽象命令类ConcreteCommand: 具体命令类Invoker: 调用者Receiver: 接收者Client:客户类典型的抽象命令类代码:public abstract class Command public abstract void execute(); 典型的调用者代码:public class I
15、nvoker private Command command; public Invoker(Command command) mand=command; public void setCommand(Command command) mand=command; /业务方法,用于调用命令类的方法 public void call() command.execute(); 典型的具体命令类代码:public class ConcreteCommand extends Command private Receiver receiver; public void execute() receiver
16、.action(); 典型的请求接收者代码:public class Receiver public void action() /具体操作 迭代器模式迭代器模式包含如下角色:Iterator: 抽象迭代器ConcreteIterator: 具体迭代器Aggregate: 抽象聚合类ConcreteAggregate: 具体聚合类实例:电视机遥控器 电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作,本实例我们将模拟电视机遥控器的实现。 观察者模式观察者模式包含如下角色:Subject: 目标ConcreteSubject: 具体目标Observer: 观察者Concr
17、eteObserver: 具体观察者典型的抽象目标类代码如下所示:public abstract class Subject protected ArrayList observers = new ArrayList(); public abstract void attach(Observer observer); public abstract void detach(Observer observer); public abstract void notify(); public class ConcreteSubject extends Subject public void atta
18、ch(Observer observer) observers.add(observer); 典型的具体目标类代码如下所示: public void detach(Observer observer) observers.remove(observer); public void notify() for(Object obs:observers) (Observer)obs).update(); 典型的抽象观察者代码如下所示:public interface Observer public void update(); 典型的具体观察者代码如下所示:public class Concrete
19、Observer implements Observer public void update() /具体更新代码 客户端代码片段如下所示:Subject subject = new ConcreteSubject();Observer observer = new ConcreteObserver();subject.attach(observer);subject.notify(); 策略模式策略模式包含如下角色:Context: 环境类Strategy: 抽象策略类ConcreteStrategy: 具体策略类不使用策略模式的代码:public class Context public
20、void algorithm(String type) . if(type = strategyA) /算法A else if(type = strategyB) /算法B else if(type = strategyC) /算法C . 重构之后的抽象策略类:public abstract class AbstractStrategy public abstract void algorithm(); 重构之后的具体策略类:public class ConcreteStrategyA extends AbstractStrategy public void algorithm() /算法A
21、重构之后的环境类:public class Context private AbstractStrategy strategy; public void setStrategy(AbstractStrategy strategy) this.strategy= strategy; public void algorithm() strategy.algorithm(); 客户端代码片段:Context context = new Context();AbstractStrategy strategy;strategy = new ConcreteStrategyA();person.setStrategy(strategy);person.algorithm();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1