`
mengqingyu
  • 浏览: 328542 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

设计模式 笔记(附带代码)

阅读更多
1.策略模式
    例如:动物有很多行为,把共同的行为用抽象类写出,并继承。不同的行为用一组接口和实现类来封装,
让他们之间可以互相替换,把接口的对象封装在抽象类中,提供set方法以便动态改变。这样可以被轻易地扩
充与改变。如果需要,甚至在运行时也可以改变行为。
场景:httpservlet#service

2.观察者模式
    定义了对象之间的一对多关系,主题用一个共同的接口来更新观察者,主题类中存放着观察者对象集合,当主题有数据更新时候可以通知
多个观察者对象,包括通用的java.util包中的Observable,Observer。应用场景Swing框架的JButton实现
场景:广播机制,聊天室,servlet监听器

3.装饰者模式
    在设计中,允许行为可以被扩展,而无须修改现有代码,通过组合和委托可用于在运行时动态地加上新
的行为。实现方式:装饰者和被装饰者拥有共同的接口(Component),装饰者是核心组件通过接口方法完成特定的目标,而被装饰者类继承拥有Component接口引用的抽象超类,通过被装饰者构造器将装饰者传入,并且在被装饰者实现的Component接口方法中通过调用继承的Component引用的被装饰者对象方法,并且在此前后加入装饰内容。
应用场景:包括java.io包中的被装饰者类:InputStream,装饰者类:BufferedInputStream。
场景:IO文件流套缓冲流

4.工厂方法模式
简单工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

5.抽象工厂模式
工厂是用来封装对象的创建,工厂方法使用继承:把对象的创建委托给子类,子类实现工厂方法来创建对象。所有工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合。

6.单态模式
    单态模式确保程序中一个类最多只有一个实例,并提供访问这个实例的全局点。

7.迭代器模式
    迭代器提供了一个通用的接口,让我们遍历聚合的项,当我们编码使用聚合的项时,就可以使用多态机制。
场景:iterator

8.代理模式
    代理模式为另一个对象提供代表,以便控制客户对对象的访问,动态创建并实例化对象的代理类,并未查询数据库信息初始化对象属性,而是真正调用到使用了数据库内容的对象属性时,再查询数据库初始化属性。
应用场景:spring AOP,hibernate数据延迟加载,在加载对象时,通过代理对象。

9.责任链模式
    场景:try catch,js事件冒泡和捕获机制,servlet过滤器

10.适配器模式
    适配器模式与装饰者模式很类似,区别在于适配器改变接口以符合客户的期望。以下附件是对应以上几个模式的实例。
场景:IO字节流转字符流

11.享元模式
    Flyweight享元,可以理解为共享元对象,也就是共享细粒度对象。享元模式就是通过使用共享的方式,达到高效地支持大量的细粒度对象。它的目的就是节省占用的空间资源,从而实现系统性能得到改善。享元模式主要作用是实现对象的共享,即使用共享池,从而减少内存分配的开销。享元模式通常与工厂模式一起使用,它包含了多个共享的组合对象,因此:享元模式=单例模式+工厂模式+合成模式
场景:线程池

12.原型模式:浅复制_深复制_Clonable接口

13.模板方法模式:父类定义模板骨架,子类不可覆盖,只需重写部分抽象回调方法。Jdbctemplate

14.建造者模式:quartz创建定时器

15.桥接模式:JDBC驱动程序

16.组合模式:XML文件解析,资源管理器,junit单元测试

17.外观(门面)模式
外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口

18.中介者模式:MVC、invoke

19.命令模式:数据库事务

20.解释器模式:groovy、数学解析器sql、正则、el、Expression4j

21.访问者模式:XML文档解析、复杂嵌套对象

22.状态模式:银行系统中账号状态管理、线程状态之间的切换

23.备忘录模式:数据库事务回滚

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics