谈谈设计模式

Posted hanguocai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谈谈设计模式相关的知识,希望对你有一定的参考价值。

一:设计模式分类

创建类:工厂模式,单例,构建,原型。

结构类:桥梁,代理,装饰,适配,门面,组合,外观,享元。

行为类:责任链,模板,策略,观察者,中介,访问者,状态,命令,解释器,迭代器

 

举例:装饰模式:

public BufferedInputStream(InputStream in)
技术分享图片

 

工厂:HttpRequest request = HttpRequest.newBuilder(new URI(uri))
                     .header(headerAlice, valueAlice)
                     .headers(headerBob, value1Bob,
                      headerCarl, valueCarl,
                      headerBob, value2Bob)
                     .GET()
                     .build();

单例 :

 public class Singleton {
       private static Singleton instance = new Singleton();
       public static Singleton getInstance() {
          return instance;
       }
    }

public class Singleton {
        private static Singleton instance;
        private Singleton() {
        }
        public static Singleton getInstance() {
            if (instance == null) {
            instance = new Singleton();
            }
        return instance;
        }
    }

 

public class Singleton {
    private static volatile Singleton singleton = null;
    private Singleton() {
    }

    public static Singleton getSingleton() {
        if (singleton == null) { // 尽量避免重复进入同步块
            synchronized (Singleton.class) { // 同步.class,意味着对同步类方法调用
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

这里的volatile 可以保证类中如果有多个变量,初始化完成后,才能get ,就是保证了

 

public class Singleton {
    private Singleton(){}
    public static Singleton getSingleton(){
        return Holder.singleton;
    }

    private static class Holder {
        private static Singleton singleton = new Singleton();
    }
}

 

private static final Runtime currentRuntime = new Runtime();
private static Version version;
// …
public static Runtime getRuntime() {
    return currentRuntime;
}
/** Don‘t let anyone else instantiate this class */
private Runtime() {}

注意这里的final ,可以保证顺序的语义。

 

spring中用到了哪些设计模式:

beanfactory

单例,

aop,代理,装饰,适配

jdbcTemplate 模板方法。

事件监听:观察者模式

 


































































以上是关于谈谈设计模式的主要内容,如果未能解决你的问题,请参考以下文章

谈谈23种设计模式在Android源码及项目中的应用

谈谈设计模式之代理模式

谈谈工厂的作用

深入谈谈Java最简单的单例设计模式

谈谈MVC模式

Java -- 每日一问:谈谈你知道的设计模式?