1、简单工厂模式
简单工厂模式的本质就是一个工厂类根据传入的参数,动态的决定实例化哪个类。
Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象。
2、工厂方法模式
应用程序将对象的创建及初始化职责交给工厂对象,工厂Bean。
定义工厂方法,然后通过config.xml配置文件,将其纳入Spring容器来管理,需要通过factory-method指定静态方法名称。
3、单例模式
Spring用的是双重判断加锁的单例模式,通过getSingleton方法从singletonObjects中获取bean。单例模式有以下特点:
++663
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
目的:
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
单例模式7种写法:
线程不安全懒汉式、线程安全懒汉式、饿汉式、使用容器实现单例模式、静态内部类、枚举单例、双重校验锁
/*
* 一来就生成对象,饿汉式
* 优点:1 安全
* 缺点:1 项目启动会占内存,会增加启动的时间
*/
public class Singleton_h {
//1构造器私有
private Singleton_h() {
}
//2静态的实例指向自身
private static Singleton_h s = new Singleton_h();
//3公共的方法暴露这个实例
public static Singleton_h getInstance() {
return s;
}
}
/*
* 懒汉式单例
* 优点:延迟创建实例,需要再创建
* 缺点:是有线程安全问题的单例,后面多线程会修复这个程序
*/
public class Singleton_l {
//1 私有的构造器
private Singleton_l() {
}
//2私有的实例变量
private static Singleton_l s;
//3一个公共的静态的方法暴露实例
public static Singleton_l getInstance() {
//判断没有实例
if(s ** null) {
//创建一个单例对象
s = new Singleton_l();
}
return s;
}
}
/*
* 双重判空
*/
public class Singleton_s{
private class Singleton_s(){}
private volatile stataic Singleton_s singleton;
public static Singleton_s getInstance(){
if(singleton ** null){
synchronized(Singleton_s.class){
if(singleton ** null){
singleton = new Singleton_s();
}
}
}
return singleton;
}
}
4、代理模式
Spring的AOP中,使用的Advice(通知)来增强被代理类的功能。Spring实现AOP功能的原理就是代理模式(① JDK动态代理,② CGLIB字节码生成技术代理。)对类进行方法级别的切面增强。
5、装饰器模式
装饰器模式:动态的给一个对象添加一些额外的功能。
Spring的ApplicationContext中配置所有的DataSource。这些DataSource可能是不同的数据库,然后SessionFactory根据用户的每次请求,将DataSource设置成不同的数据源,以达到切换数据源的目的。
在Spring中有两种表现:
一种是类名中含有Wrapper,另一种是类名中含有Decorator。
6、观察者模式
定义对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
Spring中观察者模式一般用在listener的实现。
7、策略模式
策略模式是行为性模式,调用不同的方法,适应行为的变化 ,强调父类的调用子类的特性 。
getHandler是HandlerMapping接口中的唯一方法,用于根据请求找到匹配的处理器。
8、模板方法模式
Spring JdbcTemplate的query方法总体结构是一个模板方法+回调函数,query方法中调用的execute()是一个模板方法,而预期的回调doInStatement(Statement state)方法也是一个模板方法。
9、设计模式两大主题&六大原则
设计模式的两大主题—— 系统复用 和 系统拓展
设计模式六大原则:
1、单一职责原则(Single Responsibility Principle,SRP):一个类应该只有一个引起它变化的原因,即一个类应该只有一个职责。
2、开闭原则(Open-Closed Principle,OCP):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即在不修改现有代码的情况下,通过扩展来增加新功能。
3、里氏替换原则(Liskov Substitution Principle,LSP):子类必须能够替换掉父类并且能够正常使用,即子类应该能够继承父类的行为而不改变父类原有的功能。
4、依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖于低层模块,二者都应该依赖于抽象。即要依赖于抽象,而不是依赖于具体实现。
5、接口隔离原则(Interface Segregation Principle,ISP):客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。
6、迪米特法则(Law of Demeter,LoD):一个对象应该对其他对象有尽可能少的了解,即一个类应该尽量减少对其他类的依赖。
本文暂时没有评论,来添加一个吧(●'◡'●)