设计模式之模板模式和建造者模式

原创 2015年11月21日 17:54:57

一、说明:我觉得模板模式真的没有什么东西,似乎只是简单的利用了继承,而且和建造者模式差不多。
二、模板模式定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,是的子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

    例子:比如制造一个产品X,需要先制作零件a,然后零件b,然后零件c,这样就设计一个AbstractProductX的抽象类,然后定定义零件a、b、c的制造方法,然后定义一个createProduct方法将三个零件做出来。
  class abstract AbstractProductX{
                   Abstract void a();
                   Abstract void b();
                   Abstractvoid c();
                    void createProduct(){
                        this.a();
                        this.b();
                        this.c();
                    } 
                }
将制造零件abc的具体方法延迟到子类中去实现,这样如果未来科技发展了以后导致a零件的制造方法改变了,那么只需要改变一下a()函数就可以了。而不会影响整体的框架。

建造者模式定义:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。(定义没看懂啊)
我个人的理解就是在模板模式的基础上使得框架方法中的执行顺序可以根据需要而改变。(也就是上面例子中的createProduct
函数中的几个函数执行顺序可以任意改变)。
例子:

抽象基础类


public abstract class AbstractProductX {
    protected abstract void createa();
    protected abstract void createb();
    protected abstract void createc();
    protected abstract void created();
    protected void createProduct(int[] order){
        for(int i=0;i<order.length;i++){
            if(order[i] == 0){
                this.createa();
            }else if (order[i] == 1) {
                this.createb();
            }else if (order[i] == 2) {
                this.createc();
            }else if (order[i] == 3) {
                this.created();
            }
        }
    }
}

具体实现类:Product1和Product2


public class Product1 extends AbstractProductX{

    @Override
    protected void createa() {
        System.out.println("1_a");
    }

    @Override
    protected void createb() {
        System.out.println("1_b");
    }

    @Override
    protected void createc() {
        System.out.println("1_c");
    }

    @Override
    protected void created() {
        System.out.println("1_d");
    }

}

public class Product2 extends AbstractProductX{

    @Override
    protected void createa() {
        System.out.println("2_a");
    }

    @Override
    protected void createb() {
        System.out.println("2_b");
    }

    @Override
    protected void createc() {
        System.out.println("2_c");
    }

    @Override
    protected void created() {
        System.out.println("2_d");
    }
}

既然叫建造者类当然就有建造者啦

public class Product1Builder {
    private Product1 product = new Product1();
    public Product1 getProduct(int[] order) {
        product.createProduct(order);
        return this.product;
    }
}

public class Product2Builder {
    private Product2 product = new Product2();
    public Product2 getProduct(int[] order) {
        this.product.createProduct(order);
        return this.product;
    }
}

还需要一个指挥者(不知道用了这个指挥者有什么好处?也许,如果原本设定的建造顺序发生变化,那么只需要在指挥者中去修改就可以了,而不需要到相应的建造者中去修改)


public class Director {
    private Product1Builder product1Builder = new Product1Builder();
    private Product2Builder product2Builder = new Product2Builder();
    public Product1 getProduct1() {
        System.out.println("制造product1");
        return product1Builder.getProduct(new int[]{0,1,2,3});
    }
    public Product2 getProduct2() {
        System.out.println("制造product2");
        return product2Builder.getProduct(new int[]{2,3,1,0});
    }
}

最后写一段代码测试一下:

Director director = new Director();
        director.getProduct1();
        director.getProduct2();

运行结果为:
制造product1
1_a
1_b
1_c
1_d
制造product2
2_c
2_d
2_b
2_a

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

学过设计模式之后,感觉有几个模式是具有相似的地方的,所以拿来对比一下,今天就先来说说建造者模式与模板模式。     建造者模式:        让我们先来看一下建造者模式:        定义:...
  • u013046774
  • u013046774
  • 2015年05月17日 16:56
  • 1274

模板方法模式VS建造者模式

今天再来两个设计模式的对决,模板方法模式VS建造者模式。 首先,看看模板方法模式的定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定...
  • ljianhui
  • ljianhui
  • 2012年12月23日 22:30
  • 5580

建造者模式 和模板模式的区别

一、定义 模板方法模式(TemplateMethod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 建造...
  • xiongzhengxiang
  • xiongzhengxiang
  • 2013年03月08日 10:34
  • 1083

设计模式之模板模式

定义:创建一个实施一组方法和功能的抽象类,子类通常将这个对象作为模板用于自己的设计。 下面是一个简单的模板模式的例子 ...
  • cabing2005
  • cabing2005
  • 2013年08月25日 16:44
  • 864

设计模式之禅——模板方法模式&钩子方法

**模**板方法模式的定义:定义一个操作的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的框架即可重定义该算法的某些特定步骤。例子:做一个简单的悍马车的模型见UML图 一个抽象悍马...
  • TyroneRenekton
  • TyroneRenekton
  • 2016年08月21日 12:15
  • 4637

【java设计模式】之 建造者(Builder)模式

我们还是举上一节的例子:生产汽车。上一节我们通过模板方法模式控制汽车跑起来的动作,那么需求是无止境的,现在如果老板又增加了额外的需求:汽车启动、停止、鸣笛引擎声都由客户自己控制,他想要什么顺序就什么顺...
  • eson_15
  • eson_15
  • 2016年05月06日 08:59
  • 5036

浅谈JAVA设计模式之——建造者模式(Builder)

一、概述 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二、适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 2.当构造过程必须允许被...
  • l1028386804
  • l1028386804
  • 2015年05月02日 21:22
  • 9783

设计模式:建造者模式(Builder)

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。  建造者模式通常包括下几个角色: 1. builder(抽象建造者):给出一个抽象结论,以规范产品对象的...
  • u013256816
  • u013256816
  • 2016年03月25日 11:18
  • 2063

设计模式——建造者

最近的心得,我发现学一门设计模式,不管你是否能立刻理解它,第一最要紧的是要记住两个东西。1、它是属于什么范畴的设计模式。2、记住UML图。这两个是打开这个设计模式之门的金钥匙!为什么这么讲?因为刚刚学...
  • hello_haozi
  • hello_haozi
  • 2014年08月25日 14:17
  • 16211

三分钟理解“建造者模式”——设计模式轻松掌握

“建造者模式”生活中的例子: 肯德基做汉堡的过程都是有严格的规范的,不管是麦香鸡腿堡还是新奥尔良烤鸡腿堡,他们的制作步骤都是有严格规定,做汉堡的人既不能多做一步,也不能少做一步。对于不同的汉堡来说,虽...
  • u010425776
  • u010425776
  • 2015年08月30日 14:07
  • 1239
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式之模板模式和建造者模式
举报原因:
原因补充:

(最多只允许输入30个字)