建造者与模板模式——设计模式(四)

来源:互联网 发布:微软雅黑字体 for mac 编辑:程序博客网 时间:2024/06/05 19:35

       学过设计模式之后,感觉有几个模式是具有相似的地方的,所以拿来对比一下,今天就先来说说建造者模式与模板模式。

    建造者模式:

       让我们先来看一下建造者模式:

       定义:将一个复杂额对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

       UML图:

            

         通过这张图,我们可以看到Builder是为创建一个Product对象的各个部件指定的抽象接口。ConcteteBuilder是具体的建造者,实现Builder接口,构造和装配各个部件。Product是产品角色。Director是指挥者它构建一个使用Builder接口的对象。我们在创建一些复杂的对象时,这些对象内部构建的建造顺序通常是稳定的,但是对象内部的构建通常面临变化,这时我们就需要用建造者模式了。那么这句话怎么理解呢?它的意思就好比,在建房时,先打地基,在垒墙,然后盖顶。建不同的房的顺序大概都是这样的,但是不同的房子,占地面积不同,高度不同。

       模板方法模式:

       定义:定义一个操作中的算法的骨架,而将一些不走延迟到子类中。模板方法是的子类可以不改变一个算法的结构即可冲定义该算法的某些特定步骤。
       UML图:
       
        模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。模板方法模式最根本的是提供一个很好的代码复用平台。当遇到一系列步骤构成的过程需要执行,这个过程从高层上看是相同的,但是有些步骤的实现可能不同时,就可以使用模板方法模式。也就是说,当不变的和可变的行为在方法的子类视线中混合在一起的时候,不变额行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到一个单一的地方,这样就帮助子类拜托重复的不变行为的纠缠。

       对比:

       说到这里还没有说为什么把他们放到一起对比,为什么我要把此二者放到一起对比一下呢?大家从UML可以看到建造者模式通过Builder创建一个抽象的产品,封装要创建产品的抽象方法,通过子类重写来实现具体子类的多态。这就与模板方法很像了,通过AbstractClass来封装子类不变的行为,让子类去重写具有变化的地方来实现多态。
       但是这二者却是有根本的不同的,首先建造者模式是创建型模式是为了创建而生的,模板方法模式是行为模式,是为了描述类的行为而生的。其次在建造者模式中抽象类的上方有指挥者来管理具体的实例化步骤,使得建造者模式的构建过程非常的稳定。而模板模式抽象类之上没有别的类来管理,类的安全性的保障都必须由抽象类来保证。并且就我个人的观点来看,建造者模式抽去指挥者之后,就是一个模板方法模式。
0 0
原创粉丝点击