第五章 Singleton 模式
单例模式应该是开发中用的比较多的模式。这里我只记一个知识点。
多线程下安全的单例模式的一个知识点
public class Singleton{
public static InstanceClass instance = null;
public static Singleton getInstance(){
if(instance == null){
sychronized{
if(instance == null){
instance = new InstanceClass();
}
}
}
}
}
这里为什么要 判断两次 instance == null ?
因为 sychronized 是重量级锁(Java早期版本),这是因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对比较长的时间,时间成本相对较高。
因此提前 判断 是否为 null, 可以防止之后的程序一直去尝试获得锁。
第六章 Prototype 模式
Manager 类将各种原型类记录在一个HashMap里
public class Manager {
private HashMap<String,Product> showcase = new HashMap();
public void register(String name, Product proto) {
showcase.put(name,proto);
}
public Product create(String protoName) {
Product product = (Product) showcase[protoName];
return product.createClone();
}
}
接口 Product 类需要继承 Cloneable 类
当 Product 的子类可以通过clone 直接获取到相关类实现
publci class UnderlinePen implements Product{
/*
*省略
*/
public Product createClone(){
Product p = null;
try{
p = (Product) clone();
} catch (CloneNotSupportedException e){
e.printStachTrace();
}
return p;
}
}
Messager 只需要创建的时候 根据实例名称 返回对应的克隆对象即可。
第七章 Build 模式
没什么讲的,使用的时候传入不同的 Builder 然后通过 Dirctor类 去执行 construct , 最后getResult 结果就可以了。
和Teamplete Method 模式有什么异同?
Teamplete Method 只有接口和实现类,接口通过 为 finnal 方法 控制行为。【finnal 就是为了防止子类修改】
但是Build 却是 Dirctor 的 construct 方法去控制行为。
第八章 Abstract Factory 模式
Builder 模式 和 Abstract Factory 模式 的关系
Abstract Factory 模式通过调用抽象产品接口来组成抽象产品,生成具有发杂结构的实例。
Builder 则是分阶段的制作发杂实例。
前者更强调组件化,因为组件多所以有 “工厂” 一说。后者则是只是负责调用,感觉操作性不是很强。
Factory Method 和 Abstract Factory 模式 的关系
抽象工厂 用到了 Factory Method 模式
标签:Product,图解,null,Factory,模式,instance,实例,设计模式,public From: https://www.cnblogs.com/dasuxd/p/18525930