设计模式

作者: 林几许 | 来源:发表于2022-02-21 07:50 被阅读0次

    常见的设计模式有哪些?

    常见的工厂模式,代理模式,模板方法模式,责任链模式,单例模式,包装设计模式,策略模式等。
    手写代码用的多的一般是模板方法模式,责任链模式,策略模式,单例模式。
    Spring中有工厂模式,代理模式。

    单例模式
    • 饿汉式,简单懒汉式(在方法声明时加锁),DCL双重检验加锁(进阶懒汉式),静态内部类(优雅懒汉式),枚举。
      所谓懒汉式,是指还没被用到,就直接初始化了对象,所谓懒汉式指的是等用到的时候,才进行初始化。
    //饿汉式
    class Singleton{
            private static Singleton  singleton = new Singleton();
            provate Signleton(){}
            provate static Singleton getInstance(){
                    return singleton;
            }
    }
    //简单懒汉式(方法加锁)
    class Singleton{
            private static Singleton  singleton = null;
            provate Signleton(){}
            provate static synchronized Singleton getInstance(){
                    if(singleton == null){
                        singleton = new Singleton();
                    }
                    return singleton;
            }
    }
    //DCL懒汉式
    class Singleton{
            //这里要加volatile修饰,防止指令重排导致线程不安全的问题
            private static  volatile Singleton  singleton = null;
            provate Signleton(){}
            provate static synchronized Singleton getInstance(){
                    if(singleton == null){
                      synchronized (Singleton.class){
                        if(singleton == null){
                           singleton = new Singleton();
                        }
                      }
                    }
                    return singleton;
            }
    }
    //静态内部类 懒汉式
    class Singleton{
            provate Signleton(){}
            //使用静态内部类的方式来实现懒加载(一定线程安全)
            provate static class lazyHolder{
                  private static  final Singleton  singleton = new Singleton();
            }
            provate static final Singleton getInstance(){
                  return lazyHolder.singleton;
            }
    }
    //枚举
    enum Singleton{
        SINGLETON,
    }
    
    模板方法模式
    //模板方法模式
    public boolean handle(Task task){
        //messyCodeCheck是统一逻辑处理方法
        if(messyCodeCheck(task)){
            return doHandle(task)
        }else {
            return false  
        }
    }
    
    //doHandle由子类实现
    public abstract boolean doHandle(Task task);
    
    代理模式

    Spring的Aop就是代理

    Spring使用的常见设计模式
    • Spring IOC容器可以理解为应用了工厂模式,通过ApplicationContext或beanFactory去获取对象
    • Spring的对象默认都是单例的
    • Spring AOP用了代理模式
    • Spring的事务处理器应用了模板方法模式
    • Spring的事件驱动模型用了观察者模式

    相关文章

      网友评论

        本文标题:设计模式

        本文链接:https://www.haomeiwen.com/subject/cvrvlrtx.html