设计模式问题整理_第1页
设计模式问题整理_第2页
设计模式问题整理_第3页
设计模式问题整理_第4页
设计模式问题整理_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。一、 Singleton 1、 饱汉模式public classSingleTon private SingleTon()/实例化放在静态代码块里可提高程序的执行效率,但也可能更占用空间private final static SingleTon

2、instance =new SingleTon();public static SingleTon getInstance()return instance;2、 饥汉模式public classSingleTon private SingleTon()private static instance = null;/newSingleTon();public static synchronized SingleTongetInstance()if(instance = null)instance = new SingleTon();return instance;二、 工厂方法1、 普通工厂p

3、ublic class SendFactory public Sender produce(String type) if ("mail".equals(type) return new MailSender(); else if ("sms".equals(type) return new SmsSender();2、 多个工厂方法模式对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。public class SendFactory public Sender

4、produceMail()return new MailSender();public Sender produceSms()return new SmsSender();3、 静态工厂方法模式将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。public class SendFactory public static Sender produceMail()return new MailSender();public static Sender produceSms()return new SmsSender();三、 抽象工厂(Abstract Factory)工厂

5、方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。适用于工厂中有多个产品族的情况。public interface Creator/抽象工厂类,用来产生具体的工厂public ProductA factoryA();public ProductB factoryB();public class ConcreteCreator1 implements Creator/具体工厂1,

6、用来生成品质为1产品public ProductA factoryA()return new ProductA1();public ProductB factoryB()return new ProductB1();四、 代理模式(Proxy)public interface Subject public void doSomething(); public class RealSubject implements Subject public void doSomething() System.out.println( "call doSomething()" ); pu

7、blic class ProxyHandler implements InvocationHandler private Object proxied; public ProxyHandler( Object proxied ) xied = proxied; public Object invoke( Object proxy, Method method, Object args ) throws Throwable /在转调具体目标对象之前,可以执行一些功能处理 /转调具体目标对象的方法 return method.invoke( proxied, args); /在转调

8、具体目标对象之后,可以执行一些功能处理 public class DynamicProxy public static void main( String args ) RealSubject real = new RealSubject(); Subject proxySubject = (Subject)Proxy.newProxyInstance (Subject.class.getClassLoader(), new ClassSubject.class, new ProxyHandler(real);proxySubject.doSomething(); 五、 责任链模式public

9、 abstract class Handler /* * 持有后继的责任对象 */ protected Handler successor; /* * 示意处理请求的方法,虽然这个示意方法是没有传入参数的 * 但实际是可以传入参数的,根据具体需要来选择是否传递参数 */ public abstract void handleRequest(); /取值方法 public Handler getSuccessor() return successor; /赋值方法,设置后继的责任对象 public void setSuccessor(Handler successor) this.success

10、or = successor; public class ConcreteHandler extends Handler /* * 处理方法,调用此方法处理请求 */ Override public void handleRequest() /* * 判断是否有后继的责任对象 * 如果有,就转发请求给后继的责任对象 * 如果没有,则处理请求 */ if(getSuccessor() != null) System.out.println("放过请求"); getSuccessor().handleRequest(); else System.out.println(&quo

11、t;处理请求"); public class Client public static void main(String args) /组装责任链 Handler handler1 = new ConcreteHandler(); Handler handler2 = new ConcreteHandler(); handler1.setSuccessor(handler2); /提交请求 handler1.handleRequest(); 六、 适配器模式public interface Target /* * 这是源类Adaptee也有的方法 */ public void sam

12、pleOperation1(); /* * 这是源类Adapteee没有的方法 */ public void sampleOperation2(); public class Adaptee public void sampleOperation1()public class Adapter extends Adaptee implements Target /* * 由于源类Adaptee没有方法sampleOperation2() * 因此适配器补充上这个方法 */ Override public void sampleOperation2() /写相关的代码 七、 观察者模式观察者模式定

13、义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己。/抽象观察者角色public interface Watcher public void update(String str);/抽象主题角色,watched:被观察public interface Watched public void addWatcher(Watcher watcher); public void removeWatcher(Watcher watcher); public void notifyWatchers(String s

14、tr);public class ConcreteWatcher implements Watcher Override public void update(String str) System.out.println(str); public class ConcreteWatched implements Watched / 存放观察者列表 private List<Watcher> list = new ArrayList<Watcher>(); Override public void addWatcher(Watcher watcher) list.add(watcher); Override

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论