建造者模式—设计角度重温DNF中的角色

  

应用场景

  假设现在我们要设计DNF中的人物角色(鬼剑士、神枪手、魔法师、圣骑士、格斗家)。然而,利用面对对象的思想,必须先从实体入手,每一个角色都包含各种装备、武器、配饰,这些就当做要建造的零件,然后把装备零件组装起来,那么就是最终人物角色的能量值,然后它就将造成不同的伤害。

  回忆过程:假设要创建一个角色,先构建装备零件,控制者控制组装装备零件,构建者得到专属角色。

简述实现

  建造者模式:将一部负责对象的构建分为许多小对象的构建,最后在整合构建的模式。

  建造者模式适用于构造一个很复杂的对象,将其拆分成很多个小对象,方便管理对象。

  

  控制者(Director):控制整个组合过程,通过调用Builder内部的各组件的生成方法进行组装。

  构建者(Builder):构建者接口,定义构建各部件的方法。

  实际构建者(ConcreteBuilder):具体构建出各部件对象,获得构造结构。

  成品(Product):成品类。

  成品类(Car)

public class Car {
    //车头
    private CarHead carHead;
    //车身
    private CarBody carBody;
    //车轮
    private Wheel wheel;

    public Car() {}

    public Car(CarHead carHead, CarBody carBody, Wheel wheel) {
        super();
        this.carHead = carHead;
        this.carBody = carBody;
        this.wheel = wheel;
    }

    public void run(){
        System.out.println("车开着 嘟嘟嘟嘟!!!");
    }

    public CarHead getCarHead() {
        return carHead;
    }
    public void setCarHead(CarHead carHead) {
        this.carHead = carHead;
    }
    public CarBody getCarBody() {
        return carBody;
    }
    public void setCarBody(CarBody carBody) {
        this.carBody = carBody;
    }
    public Wheel getWheel() {
        return wheel;
    }
    public void setWheel(Wheel wheel) {
        this.wheel = wheel;
    }
}

class CarHead{
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

class CarBody{
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
}

class Wheel{
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

成品类

  抽象构建者(Builder)

public interface Builder {
    //构造车头
    void builderCarHead();
    //构造车身
    void builderCarBody();
    //构造轮子
    void builderWheel();
    //得到构建成品
    Car getCar();
}

  实际构造者(CarBuilder)

public class CarBuilder implements Builder{
    Car car=new Car();

    @Override
    public void builderCarHead() {
        System.out.println("构建车头!");
        car.setCarHead(new CarHead());
    }

    @Override
    public void builderCarBody() {
        System.out.println("构建车身!");
        car.setCarBody(new CarBody());
    }

    @Override
    public void builderWheel() {
        System.out.println("构建轮子!");
        car.setWheel(new Wheel());
    }

    public Car getCar(){
        return this.car;
    }
}

  控制者(Director)

public class Director {
    private Builder builder;

    public Director(Builder builder) {
        System.out.println("控制车组装");
        this.builder=builder;
        builder.builderCarHead();
        builder.builderCarBody();
        builder.builderWheel();
    }
}

  客户端(Client)

public class Client {
    public static void main(String[] args) {
        //制造零件
        Builder builder=new CarBuilder();
        //组装汽车
        Director director=new Director(builder);
        //获得制造结果
        Car car=builder.getCar();
        //汽车开始跑
        car.run();
    }
}

  构建者模式与工厂模式极为相似,建议还是用应用场景去记。而构建者模式相比于工厂模式它多了一个组装过程,而它的应用场景主要是用于构造一个复杂的对象,而工厂模式主要是专注于生产产品或者生产产品系列。当然,他们也可以结合,工厂模式专注于生产产品系列,而构建者模式专注于控制产品的构造流程,从而制造一个复杂的对象。对于设计模式不要拘泥于文字,主要是一种思想在我们运用的时候信手拈来。

版权声明

  作者:xiaoyongAaron(邱勇)

  出处:http://www.cnblogs.com/qiuyong/

  您的支持是对博主深入思考总结的最大鼓励。

  本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,尊重作者的劳动成果。

时间: 2024-10-06 01:46:41

建造者模式—设计角度重温DNF中的角色的相关文章

C++设计模式之建造者模式(三)

4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外,还可以通过Director类来更加精细地控制产品的创建过程,例如增加一类称之为钩子方法(HookMethod)的特殊方法来控制是否对某个buildPartX()的调用,也就是判断产品中某个部件是否需要被建造.钩子方法的返回类型通常为boolean类型,方法名一般为isXXX(),钩子方法定义在抽象建造者类中.在抽象建造者类中提供钩子方法的默认实现,具体建造者类如果不需要建造某个部件,则该建造者类覆盖抽象建造者类的钩子方法.

C#设计模式之创建类模式:建造者模式

无论在现实世界中还是软件工程中,都存在一些复杂对象,他们拥有多个组成部分,例如汽车.电脑.冰箱.洗衣机等.他们包含了大量的零部件.对于大部分用户而言,他们并不知道这些部件的装配细节,也几乎不会适用单独某部件,而是使用一辆完整的汽车,一个完整的冰箱或洗衣机.如何将这些部件组装成一个完整的产品并返回给客户,是建造者模式需要解决的问题,建造者模式可以将部件本身和他们的组装过程分开,它关注如何一步步创建一个包含多个组成部分的复杂对象,用户只需要指定复杂对象的类型即可得到该对象,而不是知道其内部的实现细节

设计模式之建造者模式(创建型)

模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是将组件和组件的组件过程分开,然后一步一步建造一个复杂的对象.所以建造者模式又叫生成器模式. 建造者模式类图 模式结构 建造者模式包含如下角色 Builder:抽象建造者 ConcreteBuilder:具体建造者 Director:指挥者 Product:产品角色 如果系统只需要一个具体的建造者类的时候,可以省略抽象建造者,有时候指挥者类也可以省略,让建造者类同时充当指挥者和建造者 简单

Java设计模式-建造者模式

建造者模式概述 建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可.它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性. 建造者模式结构 ● Builder(抽象建造者):它为创建一个产品 Product 对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一

Java设计模式学习笔记,三:建造者模式

建造者模式:实现了构建和装配的解耦,即对象的各个子组件单独构建,再进行装配,从而建造完整对象. 该模式适用于构建较为复杂的对象(多个子组件). 不同的构建者,使用相同的装配者,可以建造不同的对象实例.相同的构建者,不同的装配顺序,也可能建造出不同的对象实例. 举例: 汽车对象,子组件包括引擎.轮子和车体. Audi汽车构建者,负责制造Audi牌各个子组件.BMW汽车构建者,负责制造BMW牌各个子组件.然后将子组件统一送至汽车装配者的生产线中进行组装,最后会建造出Audi牌汽车和BMW汽车. 以下

java设计模式之建造者模式

本文继续介绍23种设计模式系列之建造者模式. 定义: 建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 实用范围 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 2.当构造过程必须允许被构造的对象有不同表示时. 角色 在这样的设计模式中,有以下几个角色: 1.Builder:为创建一个产品对象的各个部件指定抽象接口. 2.ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示

.NET设计模式 第二部分 创建型模式(3)—建造者模式(Builder Pattern)

建造者模式(Builder Pattern) ——.NET设计模式系列之四 Terrylee,2005年12月17日 概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定.如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式. 本文通过现实生活中的买

.NET设计模式(4):建造者模式(Builder Pattern)(转)

概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定.如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式. 本文通过现实生活中的买KFC的例子,用图解的方式来诠释建造者模式. 意图 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表

建造者模式的设计

四川人最喜欢吃回锅肉,但是可能你到不同的店里味道多少有些偏差.因为每个店它的做法有可能不一样:不要麦当劳.肯德基那样,生产薯条的工艺都是一样的.所以,我们在肯德基.麦当劳吃的薯条味道都一样的.嘻嘻,其实人家洋人是引入了在设计模块中的建造者模式. 什么是建造者模式?将一个复杂对象的构建与它的表示相分离:使得同样的建造过程创建不同的表示.这地方需要强调的是创建的顺序是固定的,不会发生大的变化.由于建造者模式隐蔽了复杂对象的内部组建过程,所以改变复杂对象的改变,只需在基类继承一个重新定义具体类就OK了