【有梦想的IT人】常用设计模式的总结(二) 构建模式

建造者模式(Builder Pattern)

复杂对象的构建与表示分离 开来,使得同样的构建过程可以
创建不同的表示,缺点是可能产生多余的创建者与构建过程对象,
消耗内存,不适用于内部建造顺序不稳定,变化复杂的对象,

可能导致需要创建很多具体的建造者来实现这些变化。
例子:玩游戏创建角色时的自定义,不同的搭配生成不同的角色。

构建者模式例子

【有梦想的IT人】常用设计模式的总结(二) 构建模式_第1张图片
Paste_Image.png

Product : 产品抽象类

Builder : 抽象Builder类,规范产品组建,一般是由子类实现具体的组建过程

ConcreteBuilder : 具体的Builder类

Director :统一组装过程
示例代码:

//产品类
public class Product {
    private String name;
    private String sex;
    private String clothes;
    void setName(String name ){
        this.name = name;
    }
    void setSex(String sex ){
        this.sex = sex;
    }
    void setClothes(String clothes ){
        this.clothes = clothes;
    }
    String showProduct(){
        return "姓名:"+name+"\n"+"性别:"+sex+"\n"+"服装:"+clothes;
    }
}
//抽象Builder接口
public interface Builder {
    void setName(String name);
    void setSex(String sex);
    void setClothes(String clothes);
    Product build();
}
//Builder接口实现类
public class ConcreteBuilder implements Builder {
    Product mProduct = new Product();

    @Override
    public void setName(String name) {
        mProduct.setName(name);
    }

    @Override
    public void setSex(String sex) {
        mProduct.setSex(sex);
    }

    @Override
    public void setClothes(String clothes) {
        mProduct.setClothes(clothes);
    }

    @Override
    public Product build() {
        return mProduct;
    }
}
//装配过程
private void buildProduct() {
        Builder builder = new ConcreteBuilder();
        builder.setName("夏尼采");
        builder.setSex("男");
        builder.setClothes("迷彩军装");
        builder.build();
        System.out.println( builder.build().showProduct());
    }

输出结果:

Paste_Image.png

Builder模式 VS 工厂方法模式

工厂模式一般都是创建一个产品,注重的是把这个产品创建出来就行,只要创建出来,不关心这个产品的组成部分。从代码上看,工厂模式就是一个方法,用这个方法就能生产出产品。

建造者模式也是创建一个产品,但是不仅要把这个产品创建出来,还要关系这个产品的组成细节,组成过程。从代码上看,建造者模式在建造产品时,这个产品有很多方法,建造者模式会根据这些相同方法但是不同执行顺序建造出不同组成细节的产品。

工厂模式关心整体,建造者模式关心细节
总结

Builder Pattern作为创建型模式,其着眼点在于Product,一切都是围绕这个Product的创建而展开的
Product由于整体较为复杂,将其拆分成若干PartBuilder负责将每个部分build
Builder提供一个方法,用来给ConcreteBuilder 类通过Builder来得到最后生成的Product对象

Our youth never dies,just fades away.

嗨~我是夏尼采,一个有梦想的IT男
每周输出1篇有用的文章。
如果文章对您有帮助,希望能点个赞或者关注我。
您的关注和点赞是对我最大的鼓励,感谢您的阅读

你可能感兴趣的:(【有梦想的IT人】常用设计模式的总结(二) 构建模式)