简单工厂设计模式在项目中应用
项目使用场景:根据不同的厂家,有不同的报表打印形式,而对于报表的打印他们有公共的部分,打印报表头、打印底部、和打印中间部分。
我们可以使用简单工厂模式,抽象出打印报表的接口,不同的厂家实现不同的打印接口。
单例模式在项目中应用
场景1:在DOM读取配置文件的时候,因为经常被用到这个类,我们可以设置一个全局类,不用每次都new那么多的类,节省资源消耗。
场景2:在spring的IOC依赖注入的时候,默认的是采用单例模式,例如controller层中一个类通过注入方式使用service层的一个类,而service这个类是全局变量,spring就是通过单例模式来实现的,当然我们可以通过配置spring的springMVC.xml文件来修改(prototype)。
单例模式作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
如下图所示:
/**
* @ClassName: Singleton_Simple
* @Description: 单例模式——饿汉模式
* @author summer
* @date 2015-7-14
*
*/
public class Singleton_Simple {
private static final Singleton_Simple simple = new Singleton_Simple();
private Singleton_Simple(){}
public static Singleton_Simple getInstance(){
return simple;
}
}
当然对于读取配置文件这个类我们可以作为静态类来写,那为什么还要使用单例模式呢?spring工厂中创建的bean为singleton模式和prototype格式,为什么没有使用静态类的形式?或者可以选择非静态类的静态方法?
1、静态类是在JVM加载的时候就占用内存的,而单例模式,可以在使用的时候再进行加载。也就是单例可以延迟初始化。
2、单例可以继承类,可以实现接口,而静态类不能。
3、单例类可以被集成,他的方法可以被覆写。
4、单例类可以被用来多台。
5、而针对非静态类的静态方法,如果一个类不需要扩展的话可以用这样的方式,用单例也可以,但是需要扩展的类,最好是使用单例。
代理模式在项目中的应用
应用场景:spring AOP的核心就是代理,通过代理模式的实现来实现解耦。
代理模式(proxy):为其他对象提供一种代理以控制对这个对象的访问。
JDK代理模式如下所示:
外观模式在项目中的应用
应用场景:在界面和业务逻辑层中抽取出一层,controller层调用facade层,facade层调用service层。
外观模式(facade):为子系统中一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。