建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。创造型设计模式,它提供了一种创建对象的最佳方式。

使用场景
1.初始化一个特别复杂的对象,如参数多,且很多参数都具有默认值时。
2.相同的方法,不同的执行顺序,产生不同的时间结果时。

优点
1.良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节
2.建造者独立,易扩展。

缺点
1.产品必须有共同点,范围有限制。
2.如果内部结构变化复杂,会有很多的建造类。

import org.junit.Test;

/**
 * ================================================
 * 作    者:zhoujianan
 * 版    本:v1.0
 * 创建日期:2019/11/15
 * 描    述:
 * 修订历史:
 * ================================================
 */
public class 建造者 {

    @Test
    public void main() {
        Builder builder = new MacBuilder();
        Director director = new Director(builder);
        director.contractor("因特尔主板", "Retina 显示器");
        System.out.println("computer info " + builder.create().toString());
    }


    public class Director {
        Builder mBuilder;

        public Director(Builder builder) {
            mBuilder = builder;
        }

        public void contractor(String board, String diaplay) {
            mBuilder.buildBoard(board).buildDisplay(diaplay).buildOs();
        }
    }


    public abstract class Computer {
        protected String mBoard;
        protected String mDisplay;
        protected String mOs;

        protected Computer() {

        }

        protected abstract void setOS();

        public void setBoard(String board) {
            mBoard = board;
        }

        public void setDisplay(String display) {
            mDisplay = display;
        }

        @Override

        public String toString() {
            return "Computer{" +
                    "mBoard='" + mBoard + '\'' +
                    ", mDisplay='" + mDisplay + '\'' +
                    ", mOs='" + mOs + '\'' +
                    '}';
        }
    }

    public class MacBook extends Computer {
        protected MacBook() {
        }

        @Override
        protected void setOS() {
            mOs = "Mac OS X 10.1.10";
        }
    }

    public abstract class Builder {
        public abstract Builder buildBoard(String board);

        public abstract Builder buildDisplay(String diaplay);

        public abstract Builder buildOs();

        public abstract Computer create();
    }

    public class MacBuilder extends Builder {
        private Computer macComputer = new MacBook();

        @Override
        public Builder buildBoard(String board) {
            macComputer.setBoard(board);
            return this;
        }

        @Override
        public Builder buildDisplay(String display) {
            macComputer.setDisplay(display);
            return this;
        }

        @Override
        public Builder buildOs() {
            macComputer.setOS();
            return this;
        }

        @Override
        public Computer create() {
            return macComputer;
        }
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值