码迷,mamicode.com
首页 > 其他好文 > 详细

谈谈设计模式

时间:2018-12-14 13:07:10      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:ret   cte   避免   结构   zed   装饰模式   buffere   事件   iat   

一:设计模式分类

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

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

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

 

举例:装饰模式:

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 模板方法。

事件监听:观察者模式

 

谈谈设计模式

标签:ret   cte   避免   结构   zed   装饰模式   buffere   事件   iat   

原文地址:https://www.cnblogs.com/hanguocai/p/10118325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!