设计模式在项目中的应用

简单工厂设计模式在项目中应用

        项目使用场景:根据不同的厂家,有不同的报表打印形式,而对于报表的打印他们有公共的部分,打印报表头、打印底部、和打印中间部分。

        我们可以使用简单工厂模式,抽象出打印报表的接口,不同的厂家实现不同的打印接口。

设计模式在项目中的应用_第1张图片

单例模式在项目中应用

        场景1:在DOM读取配置文件的时候,因为经常被用到这个类,我们可以设置一个全局类,不用每次都new那么多的类,节省资源消耗。

        场景2:在spring的IOC依赖注入的时候,默认的是采用单例模式,例如controller层中一个类通过注入方式使用service层的一个类,而service这个类是全局变量,spring就是通过单例模式来实现的,当然我们可以通过配置spring的springMVC.xml文件来修改(prototype)。

        单例模式作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

        如下图所示:

设计模式在项目中的应用_第2张图片


  1. /**  
  2.  * @ClassName: Singleton_Simple  
  3.  * @Description: 单例模式——饿汉模式   
  4.  * @author summer  
  5.  * @date 2015-7-14   
  6.  *   
  7.  */  
  8. public class Singleton_Simple {  
  9.       
  10.     private static final Singleton_Simple simple = new Singleton_Simple();  
  11.       
  12.     private Singleton_Simple(){}  
  13.       
  14.     public static Singleton_Simple getInstance(){  
  15.         return simple;  
  16.     }  
  17.   

        当然对于读取配置文件这个类我们可以作为静态类来写,那为什么还要使用单例模式呢?spring工厂中创建的bean为singleton模式和prototype格式,为什么没有使用静态类的形式?或者可以选择非静态类的静态方法?

     1、静态类是在JVM加载的时候就占用内存的,而单例模式,可以在使用的时候再进行加载。也就是单例可以延迟初始化。

     2、单例可以继承类,可以实现接口,而静态类不能。

     3、单例类可以被集成,他的方法可以被覆写。

     4、单例类可以被用来多台。

     5、而针对非静态类的静态方法,如果一个类不需要扩展的话可以用这样的方式,用单例也可以,但是需要扩展的类,最好是使用单例。

代理模式在项目中的应用

     应用场景:spring AOP的核心就是代理,通过代理模式的实现来实现解耦。

     代理模式(proxy):为其他对象提供一种代理以控制对这个对象的访问。

     JDK代理模式如下所示:

设计模式在项目中的应用_第3张图片


外观模式在项目中的应用

     应用场景:在界面和业务逻辑层中抽取出一层,controller层调用facade层,facade层调用service层。

     外观模式(facade):为子系统中一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

设计模式在项目中的应用_第4张图片



你可能感兴趣的:(设计模式在项目中应用)