简单工厂
简单工厂模式是指由一个工厂对象决定创建哪一种产品类的实例,适用于工厂类负责对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象不需要关心。如果产品类越来越丰富,改工厂类的职责越来越多,不符合单一原则。
工厂方法模式
定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法模式让类的实例化推迟到子类中进行。工厂
方法模式中用户只需要关心所需要产品对应的工厂,无须关心创建细节,加入新产品时,符合开闭原则。主要解决产品扩展的
问题。同时类的个数过多,增加复杂度。
抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,无须指定他们的具体类。客户端(应用层)不依赖于产品类实例如何被创建,
如何被实现等细节,强调一系列相关的产品对象。
单例模式
确保一个类在任何情况下只能有一个实例,并提供一个全局的访问点。
从类初始化角度考虑,采用静态内部类的方式实现
public class LazyInnerClassSingleton{
private LazyInnerClassSingleton(){
if(LazyHolder.LAZY != null){
throw new RuntimeException("LAZY实例已存在");
}
}
public static final LazyInnerClassSingletom getInstance(){
return LazyHolder.LAZY;
}
private static class LazyHolder{
private static final LazyInnerClassSingleton LAZY = new LazyInnerClassSingleton();
}
}
原型模式
原型指定创建对象的种类,并且通过复制这些原型创建新的对象。
浅克隆:只复制值类型数据,引用对象不复制
深克隆:值类型数据和引用类型数据都会被克隆。
代理模式
为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客户单和目标对象之间起到了中介的作用。
使用代理模式主要有两种目的:保护目标对象和增强目标对象。
代理模式分为静态代理和动态代理
动态代理:更加通用的解决方案
JDK动态代理:采用字节重组,重新生成对象替代原始对象,以达到动态代理的目的。
过程如下:
1.获取被代理对象的引用,获取它的所有接口
2.jdk动态代理类重新生成一个新的类,新类实现代理类实现的所有接口
3.动态生成java代码,新加的业务逻辑方法由一定的逻辑代码调用
4.编译新生成的java代码
5.重新加载到jvm中运行
jdk动态代理和Cglib动态代理
委派模式
DispatcherServerlet用到了委派模式,根据不同的uri委派给不同的controller处理
策略模式
定义算法家族并封装起来,让它们之间可以相互替换,此模式使得算法的变化不会影响使用算法的用户
应用场景:
系统中很多的类,它们的区别仅仅是行为不同
一个系统需要动态的再几种算法中选择一种
模板模式
又叫做模板方法模式,定义一个算法骨架,允许子类为一个或者多个步骤提供实现。
网友评论