【选型】设计模式的应用

设计模式的选择

互联网的精髓就是共享,可以共享技术、共享经验、共享情感、共享快乐~

很多年前就有这个想法了,从事IT行业时间也不短了,应该把自己工作和业余所学习的东西记录并分享出来,和有缘人一起学习和交流。

如果您是那个有缘人,请上岛一叙!爪哇岛随时欢迎您!


JAVA中目前有23种设计模式,具体参考下表:

序号 创建型 结构型 行为型
1 Singleton(单例模式) Adapter(接口转换器/适配器) Chain of Responsibility(责任链模式)
2 Abstract Factory(抽象工厂) Decorator(装饰器模式) Command(封装命令/动作/事务)
3 Factory Method(工厂方法--IOC) Proxy(代理模式--AOP) Interpreter(解释器)
4 Builder(构建器--复杂对象) Bridge(分离抽象和实现) Iterator(迭代器--容器遍历)
5 Prototype(原型模式 clone) Composite(组合模式--状态树专用) Mediator(调停者模式--复杂业务解耦)
6 Decorator(装饰器模式) Memento(备忘录)
7 Facade(门面模式--复杂业务封装) Observer(观察者模式--事件处理)
8 Flyweight(享元模式--重复利用对象) State(状态模式)
9 Strategy(策略模式)
10 Template Method(模板方法 钩子)
11 Visitor(访问者模式)

  • Singleton(单例模式)
  1. 单例模式的实现有两种:饱汉模式(懒加载,不会提前占内存)和饿汉模式。饱汉不饿,饿的时候才吃;饿汉很饥饿,提前抢着吃。
  2. 单例模式的写法:
    【实用写法】
#定义
private static final Object obj = new Objecty();
private Object(){
}
public static Ojbect getInstance(){
    return obj;
}

#外部调用
Object obj = Object.getInstance();

      【最优写法--枚举单例】

public enum Object{
    INSTANCE;
}
  • Abstract Factory(抽象工厂) & Factory Method(工厂方法--IOC)
  1. 工厂系列包括:简单工厂、静态工厂、工厂方法、抽象工厂、Spring IOC;任何可以产生对象的方法或类都可以称为工厂,单例也是一种工厂(静态工厂)。
  2. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。工厂方法的使用可以让应用程序将对象的创建及初始化职责交给工厂对象。
  3. 抽象工厂的目标是:产品一族在横向上的扩展; 工厂方法的目标是:方便产品在纵向上的扩展。
  4. 从调用者角度来说,代理影藏了复杂的逻辑处理过程,调用者只用关心调用执行结果(由工厂提供对结果规范性、符合性的保证)。
  • Proxy(代理模式--AOP)
  1. 代理系列包括:静态代理(灵活性差)、动态代理(动态处理器)、Spring AOP;
  2. 代理可以理解为中介,在不改变源码的情况下,实现对目标对象的功能扩展。
  3. 静态代理在程序运行前代理类class文件已经被创建了,而动态代理是程序在运行时通过反射机制动态创建的。
  • Chain of Responsibility(责任链模式)
  1. 常用于Filter过滤器,采用链式编程;
Msg msg = new Msg();
msg.setMsg("大家好,<script>,欢迎您来到爪哇岛!");

FilterChain fc = new FilterChain();
fc.add(new HtmlFilter()).add(new SensitiveFilter()); ---链式编程
fc.doFilter(msg);
  • Observer(观察者模式)
  1. 事件处理经常使用观察者 + 责任链结合使用,通过Chain将多个观察者add起来。
  2. Observer、Listener、Hook、Callback以及js的event都采用了观察者模式;

Spring源码中设计模式的应用

  • 单例模式
  1. Spring中的Bean对象都是单例的;
  • 工厂模式
  1. BeanFactory
  • 策略模式
  1. BeanDefinitionReader(Bean定义读取器:XML、Properties等)
  2. ResourceLoader(资源加载器)
  3. BeanNameGenerator(Bean名称生成器)
  • 适配器模式
  1. HandlerAdapter(各种Adapter)
  • 代理模式
  1. AOP(JdkDynamicAopProxy 和 Cglib2AopProxy)
  • 责任链模式
  1. Filter
  2. HandlerExecutionChain
  3. MethodInterceptor
  • 观察者模式
  1. Event事件监听器
  2. Listener
  3. Multicast组播
  • 模板方法
  1. postProcessBeanFactory
  2. onRefresh
  3. initPropertyValue
posted @ 2021-06-14 23:32  岛主~it_rabbit  阅读(88)  评论(0编辑  收藏  举报