• 【设计模式】设计模式的应用场合


    接口型模式  
    把一个类的接口与一个客户的期望接口进行适配 适配器模式(Adapter)
    为类的集合提供一个简单的接口 外观模式(Facade)
    定义一个接口,使之可以应用于单个对象,也可以应用于对象组 合成模式(Composite)
    将一个抽象于其实现进行分离,使之可以相互独立变化 桥接模式(Bridge)
    职责型模式  
    将职责集中到某个类的一个单独实例 单件模式(Singleton)
    当一个对象发生改变,依赖于这个对象的其他对象都能够得到通知,而这个发生改变的对象无须了解自己被其他哪些对象使用 观察者模式(Observer)
    将职责集中到一个类,这个类可以监视其他对象的交互 中介者模式(Mediator)
    令一个对象为其他对象服务 代理模式(Proxy)
    允许一个请求使一个对象链向上级传递,直到这个请求被某个对象处理 职责链模式(Chain of responsibility)
    将共享的细粒度对象的职责进行几种 享元模式(Flyweight)
    构造型模式  
    在进行对象构造之前,要逐步收集与构造相关的信息 生成器模式(Builder)
    如果需要确定对那个类进行初始化,那么就推迟这个确定过程,直到某个合适的时刻再确定 工厂方法模式(Factory method)
    构造一族对象,他们需要共享某些特征 抽象工厂模式(Abstract factory)
    通过一个给定的实例创建对象 原型模式(Prototype)
    基于一个处于休眠状态的对象,重新构造一个对象,这个处于休眠状态的对象仅仅包容了对象的内部状态 备忘录模式(Memento)
    操作型模式  
    在一个方法中实现一个算法,但是,推迟定义算法中的某些计算步骤,从而使子类可以对这些计算步骤进行重新定义 模板方法模式(Template method)
    分配一个操作,从而可以使每个类能够表达一个不同的状态 状态模式(State)
    封装一个操作,从而可以使操作的实现能够相互进行替换 策略模式(Strategy)
    在一个对象中封装一个方法调用 命令模式(Command)
    分配一个操作,从而可以使每个实现可以应用于一个不同类型的合成 解释器模式(Interpreter)
    扩展型模式  
    使开发人员可以动态地生成一个对象的行为 装饰模式(Decorator)
    提供一种手段,用以顺序地访问一个集合中的元素 迭代器模式(Iterator)
    可以使开发人员为一个层次结构定义一个新操作,而不必改变这个层次结构中的类 访问者模式(Visitor)

    http://blog.csdn.net/rainylin/article/details/1721302


    1. 单例模式

          允许自由创建每个类没有实际意义,还有可能造成系统性能下降

          优势:减少创建java实例带来的系统开销

           便于系统跟踪某个实例的生命周期,实例状态等

         2 工厂模式

         工厂模式又分简单工厂模式,抽象工厂模式

         使用简单工厂模式的优势是:让对象的调用者和对象创建过程分离,当对象调用者需要对象时,直接向工厂请求即可。从而避免了对象的调用者与对象的实现类以硬编码方式耦合,以提高系统的可维护性、可扩展性。工厂模式也有一个小小的缺陷:当产品修改时,工厂类也要做相应的修改。

       实际用例:,应该对Spring IoC容器感到迷惑:它到底是简单工厂?还是抽象工厂?实际上,笔者倾向于认为Spring IoC容器是抽象工厂,因为Sping IoC容器可以包括万象,它不仅可以管理普通Bean实例,也可管理工厂实例。

         3代理模式

         当客户端代码需要调用某个对象时,客户端实际上也不关心是否准确得到该对象,它只要一个能提供该功能的对象即可,此时我们就可返回该对象的代理(Proxy)。

          实际用例:

    看到此处,相信读者应该对Spring的AOP框架有点感觉了:当Spring容器中的被代理Bean实现了一个或多个接口时,Spring所创建的AOP代理就是这种动态代理。Spring AOP与此示例应用的区别在哪里呢?Spring AOP更灵活,当Sping定义InvocationHandler类的invoke()时,它并没有以硬编码方式决定调用哪些拦截器,而是通过配置文件来决定在invoke()方法中要调用哪些拦截器,这就实现了更彻底的解耦——当程序需要为目标对象扩展新功能时,根本无须改变Java代理,只需要在配置文件中增加更多的拦截器配置即可。

         4 命令模式:

         某个方法需要完成某一个功能,完成这个功能的大部分步骤已经确定了,但可能有少量具体步骤无法确定,必须等到执行该方法时才可以确定。具体一点:假设有个方法需要遍历某个数组的数组元素,但无法确定在遍历数组元素时如何处理这些元素,需要在调用该方法时指定具体的处理行为.

      例子:HibernateCallback接口

         5策略模式:

        封装系列的算法

        应用实例:Hibernate的Dialect会有一点感觉了,这个Dialect类代表各数据库方言的抽象父类,但不同数据库的持久化访问可能存在一些差别,尤其在分页算法上存在较大的差异,Dialect不同子类就代表了一种特定的数据库访问策略。为了让客户端代码与具体的数据库、具体的Dialect实现类分离,Hibernate需要在hibernate.cfg.xml文件中指定应用所使用的Dialect子类。

    与此类似的是,Spring的Resource接口也是一个典型的策略接口,不同的实现类代表了不同的资源访问策略。当然Spring可以非常“智能”地选择合适的Resource实现类,通常来说,Spring可以根据前缀来决定使用合适的Resource实现类;还可根据ApplicationContext的实现类来决定使用合适的Resource实现类。具体请参考本书8.3节介绍。

         6 门面模式:

         着系统的不断改进和开发,它们会变得越来越复杂,系统会生成大量的类,这使得程序流程更难被理解。门面模式可为这些类提供一个简化的接口,从而简化访问这些类的复杂性,有时这种简化可能降低访问这些底层类的灵活性,但除了要求特别苛刻的客户端之外,它通常都可以提供所需的全部功能,当然,那些苛刻的用户仍然可以直接访问底层的类和方法。

         实例:我们可以认为HibernateTemplate是SessionFactory、Session、Query等类的门面,当客户端程序需要进行持久化查询时,程序无须调用这些类,而是直接调用HibernateTemplate门面类的方法即可。

         7桥接模式:

         由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是使用继承将无法实现这种需要,或者使得设计变得相当臃肿。

          实际应用Dao

         8 观察者模式

        观察者模式定义了对象间的一对多依赖关系,让一个或多个观察者对象观察一个主题对象。当主题对象的状态发生变化时,系统能通知所有的依赖于此对象的观察者对象,从而使得观察者对象能够自动更新。

       实际用例:jms

        

  • 相关阅读:
    dom解析和sax解析
    pull解析和sax解析的区别
    HashMap和HashTable的区别
    Java Socket通信原理简介
    Socket通信原理简介
    Android获取网络连接状态(3G/Wifi)及调用网络配置界面
    Android布局控件之LinearLayout
    onAttachedToWindow () 和 onDetachedFromWindow () ; 以及更新视图的函数ondraw() 和dispatchdraw()的区别
    Android开源界面库--ResideMenu用法
    iOS如何接收服务端返回的布尔值
  • 原文地址:https://www.cnblogs.com/daishuguang/p/3950101.html
Copyright © 2020-2023  润新知