随笔分类 - 漫谈设计模式
摘要:大量使用工厂模式引起的问题:Client 对象需要使用 Service1 的 execute( ) 方法完成特定功能,而 Service1 的实现 Service1Impe类又依赖于 Service2的实现类 Service2Impl,为了减少依赖,我们为 Service1 和 Service2对象的实例化分别提供工厂方法类的实现。public interface Service1 { void execute();} public class Service1Impl implements Service1 { private Service2 service2; pu...
阅读全文
摘要:举例:刚给我的客厅做了装修,朋友也希望给他的客厅做装修,他可能会把我家的装修方案拿过来改改就成,我的装修方案就是原型。定义:使用原型实例指定将要创建的对象类型,通过复制这个实例创建新的对象。应用场景:当创建一些非常耗时的大对象或者创建过程非常复杂时。复制原型对象不一定是指从内存中进行复制,原型数据也可能保存在数据库里。一般情况下,OOP 语言都提供了内存中对象的复制能力,Java 语言提供了对象的浅拷贝。浅拷贝(Shallow copy):复制一个对象时,如果它的一个属性是引用,则复制这个引用,使之指向内存中同一个对象;深拷贝(Deep copy):复制一个对象时,为此属性创建了一个新对象,让
阅读全文
摘要:工厂方法模式:定义:为创建对象定义一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟至子类。应用场景:客户类不关心使用哪个具体类,只关心该接口所提供的功能;创建过程比较复杂,例如需要初始化其他关联的资源类,读取配置文件等;接口有很多具体实现或者抽象有很多具体子类时,你可能需要为客户代码写一大串 if-else 逻辑来决定运行时使用哪个具体实现或者具体子类;不希望给客户程序暴露过多此类的内部结构,隐藏这些细节可以降低耦合度;优化性能,比如缓存大对象或者初始化比较耗时的对象。工厂方法模式://工厂接口定义了 createProduct()方法来放回 Product 类型的实例对象pub
阅读全文
摘要:单例(Singleton)模式:保证一个类在系统里只能有一个对象被实例化。如:缓存池、数据库连接池、线程池、一些应用服务实例等。难点:在多线程环境中,保证实例的唯一性。最简单的单例模式:保证该类构造方法是私有的,外部无法创建该类型的对象;提供一个全局访问点,方便给客户对象提供对此单例对象的使用;public class Singleton { /** * 私有变量,外界无法访问 * 可以定义 public 类型 instance变量,把属性直接暴露给客户对象,则没必要实现getInstance()方法 * 但是可读性降低,而且直接暴露实例变量的名字给客户程序,会增...
阅读全文
摘要:定义:定义在一个操作中的一个算法框架,把一些步骤推迟到子类去实现。模板方法模式让子类不需要改变算法结构而重新定义特定的算法步骤。也就是说模板方法定义了一系列算法步骤,子类可以去实现/覆盖其中某些步骤,但不能改变这些步骤的执行步骤。模板方法有如下功能:能解决代码冗余问题。把某些算法步骤延迟到子类,子类可以根据不同情况改变/实现这些方法,而子类的新方法不会引起以有父类的功能变化。易于扩展。我们通过创建新类,实现可定制化的方法就可以扩展功能。此例中,可以扩展坐船回家。父类提供了算法的框架,控制方法执行流程,而子类不能改变算法流程,子类方法的调用由父类模板方法决定。执行步骤的顺序有时候非常重要,我们在
阅读全文