美文网首页
设计模式之建造者模式

设计模式之建造者模式

作者: runningboys | 来源:发表于2018-05-23 23:23 被阅读0次
定义:

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

使用场景:
(1)相同的使用方法,不同的执行顺序,产生不同的事件结果时。
(2)多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
(3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用。
(4)当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时。

/**
 * 抽象产品类
 */
abstract class Product {
    protected String name;
    protected String type;

    public void setName(String name) {
        this.name = name;
    }

    public void setType(String type) {
        this.type = type;
    }

    public abstract void showProduct();
}

/**
 * 小米手机
 */
public class XiaoMiPhone extends Product {
    
    @Override
    public void showProduct() {
        System.out.println("名称:" + name + "型号:" + type);
    }
}

/**
 * 抽象建造者类
 */
abstract class Builder {
    public abstract Builder setName(String name);

    public abstract Builder setType(String type);

    public abstract Product create();
}

/**
 * 具体建造者
 */
class ConcreteBuilder extends Builder {
    private Product product = new XiaoMiPhone();

    @Override
    public Builder setName(String name) {
        product.setName(name);
        return this;
    }

    @Override
    public Builder setType(String type) {
        product.setType(type);
        return this;
    }

    @Override
    public Product create() {
        return product;
    }

    /**
     * 动态注入不同产品
     *
     * @param product
     */
    public void setProduct(Product product) {
        this.product = product;
    }
}

/**
 * 指挥者--用于具体产品的构造
 */
public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public Product constructA(String name, String type) {
        return builder.setName(name).setType(type).create();
    }

    public Product constructB(String name, String type) {
        return builder.setType(type).setName(name).create();
    }
}

/**
 * 客户端调用
 */
public class Client {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        Product productA = director.constructA("小米", "MI-6X");
        productA.showProduct();
        Product productB = director.constructB("为发烧而生:小米", "MI-6X");
        productB.showProduct();
    }
}

安卓源码中的常见用法:

AlertDialog.Builer builder=new AlertDialog.Builder(context);
builder.setIcon(R.drawable.icon)
    .setTitle("title")
    .setMessage("message")
    .setPositiveButton("Button1", 
        new DialogInterface.OnclickListener(){
            public void onClick(DialogInterface dialog,int whichButton){
                setTitle("click");
            }   
        })
    .create()
    .show();

最简单常用的写法:

/**
 * 苹果手机
 */
public class ApplePhone {
    private String name;
    private String type;

    public static class Builder {
        private String name;
        private String type;

        public Builder setName(String name){
            this.name = name;
            return this;
        }

        public Builder setType(String type){
            this.type = type;
            return this;
        }

        public ApplePhone create() {
            ApplePhone phone = new ApplePhone();
            phone.name = name;
            phone.type = type;
            return phone;
        }
    }
}

/**
 * 客户端调用
 */
public class Client {
    public static void main(String[] args) {
        ApplePhone.Builder builder = new ApplePhone.Builder();
        ApplePhone phone = builder.setType("Iphone8X").setName("我是一个小苹果").create();
    }
}

建造者模式的优点是封装性好,且易于扩展。建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给指挥者类。由指挥者类负责将各个组件按照特定的规则组建为产品,然后将组建好的产品交付给客户端。

相关文章

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 设计模式之建造者模式

    设计模式之建造者模式 1. 模式定义 建造者模式又可以成为生成器模式,它属于对象创建型模式。建造者模式将一个复杂对...

  • Javaの设计模式之建造者模式

    推荐阅读:《设计模式之禅》 今早早起,刚刚出炉,哈哈 BuilderPattern 设计模式之建造者模式 Demo...

  • 设计模式之建造者模式

    设计模式之建造者模式 建造者模式 属于 创建型模式,提供一种创建对象的最佳方式。 创建型模式 指不是直接使用ne...

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • java设计模式--建造者模式

    java设计模式--建造者模式 建造者模式定义 建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有...

  • 【Java设计模式】--建造者模式

    建造者模式(Bulider模式) 一、什么是建造者模式 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示...

  • 建造者设计模式-Builder design pattern

    建造者设计模式是创建型设计模式的一种。创建型设计模式处理对象创建的问题。 建造者设计模式,用来构建需要经过若干个建...

网友评论

      本文标题:设计模式之建造者模式

      本文链接:https://www.haomeiwen.com/subject/zzudjftx.html