谈谈设计模式
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 模板方法。
事件监听:观察者模式
以上是关于谈谈设计模式的主要内容,如果未能解决你的问题,请参考以下文章