再看设计模式——工厂方法与抽象工厂模式

传统GOF的24种设计模式中有两个工厂模式:工厂方法(factory method) vs 抽象工厂(absctract factory),而通常又能听到所谓的简单工厂模式(simple factory)。实际上简单工厂的实现就是一个static的工厂创建方法,也就是工厂方法,两个是同一个东西。 工厂方法模式在工程实现上可以使用map替代switch case,用来关联产品标识符和具体产品类型(这 …

阅读全文

再看设计模式——状态模式与策略模式

根据不同的状态,执行不同的行为。相比switch case思路,使用状态模式能让数据与行为封闭性更好,添加新的状态也比较简单,状态间的切换逻辑不用刻意去维护,但是不如switch切换状态顺序流那么清晰。 实际实现中状态模式对”开闭原则”的支持并不太好。有两种实现存放的思路: 静态状态。初始化时把所有可能的状态对象都new好,状态切换时通过赋值改变当前的状态。 实例化状态。每 …

阅读全文

再看设计模式——单例模式

这个模式其实就是要保证只有一个实例存在。通常的实现思路就是持有一个私有静态实例,保证仅一次初始化,以getInstance方法返回。但是实际实现这个模式要考虑更多细节:  线程安全与DLC 单例对象的析构与销毁 组件中单例对象的管理 单例模式的单元测试 使用C++实现还必须额外注意一些实现细节 静态成员变量初始化顺序不依赖构造函数, 多个单例可能初始化顺序不对 延迟初始化(第一次使用才初始化)需要 …

阅读全文

Java的CAS实现总结

CAS原理 CAS通过调用JNI的代码实现的。JNI:Java Native Interface为JAVA本地调用,允许java调用其他语言。 而compareAndSwapInt就是借助C来调用CPU底层指令实现的。 下面从分析比较常用的CPU(intel x86)来解释CAS的实现原理。 下面是sun.misc.Unsafe类的compareAndSwapInt()方法的源代码: public …

阅读全文