经常使用设计模式的应用场景

1. 单例模式:
      容许自由建立每一个类没有实际意义,还有可能形成系统性能降低。优点:减小建立java实例带来的系统开销,便于系统跟踪某个实例的生命周期,实例状态等。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. 观察者模式
    观察者模式定义了对象间的一对多依赖关系,让一个或多个观察者对象观察一个主题对象。当主题对象的状态发生变化时,系统能通知全部的依赖于此对象的观察者对象,从而使得观察者对象可以自动更新。
   实际用例:jms1. 这里是列表文本数据库

相关文章
相关标签/搜索