首页 > 其他 > 详细

建造者模式

时间:2019-04-01 20:28:54      阅读:96      评论:0      收藏:0      [点我收藏+]

 1)作用:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

2)关键点:

  1.Product(具体产品):表示被构造的复杂对象。

  2.Builder(抽象构建产品):为构建一个产品对象的各个部件指定抽象接口。

  3.BuilderImpl(抽象构建的具体实现):实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示。

  4.Director(建造者):构造一个使用Builder接口的对象。

3)优点:

  1.易于解耦:将产品本身与产品创建过程进行解耦,可以使用相同的创建过程来得到不同的产品,也就是说细节依赖抽象。

  2.易于精确控制对象的创建:将复杂的产品创建步骤分解在不同方法中,使得创建过程更加清晰。

  3.易于拓展:增加新的具体的建造者无需修改原有类库,易于拓展,符合开闭原则。

4)缺点:1.建造者所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间差异性很大,则不适合使用建造者模式,因此其使用范围受到一定限制。

     2.如果产品内部变化复杂,可能会导致需要定义很多具体的建造者来实现这种变换,导致系统很庞大。

5)应用场景:1.需要生产的产品对象有复杂的内部结构,这些产品对象具有共性;

      2.隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

package com.ual.builder;
//具体产品
public class Computer {
    private String mainBoard;//主板
    private String  hardDisk;//硬盘
    private  String cpu;//cpu

    public String getMainBoard() {
        return mainBoard;
    }

    public void setMainBoard(String mainBoard) {
        this.mainBoard = mainBoard;
    }

    public String getHardDisk() {
        return hardDisk;
    }

    public void setHardDisk(String hardDisk) {
        this.hardDisk = hardDisk;
    }

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "mainBoard=‘" + mainBoard + ‘\‘‘ +
                ", hardDisk=‘" + hardDisk + ‘\‘‘ +
                ", cpu=‘" + cpu + ‘\‘‘ +
                ‘}‘;
    }
}
package com.ual.builder;

public interface buider {
    //构建主板
    public void builderMainBoard();
    //构建主板
    public void builderHD();
    //构建cpu
    public void builderCpu();
    //生成产品
    public Computer builderComputer();
}
package com.ual.builder;
//具体的构建
public class ComputerBuilder implements buider {
    private Computer c=new Computer();
    @Override
    public void builderMainBoard() {
        c.setMainBoard("戴尔");
    }

    @Override
    public void builderHD() {
        c.setMainBoard("希捷");
    }

    @Override
    public void builderCpu() {
        c.setCpu("intel");
    }

    @Override
    public Computer builderComputer() {
        return c ;
    }
}
package com.ual.builder;
//具体的构建
public class ComputerBuilder1 implements buider {
    private Computer c=new Computer();
    @Override
    public void builderMainBoard() {
        c.setMainBoard("华硕");
    }

    @Override
    public void builderHD() {
        c.setMainBoard("金士顿");
    }

    @Override
    public void builderCpu() {
        c.setCpu("AMD");
    }

    @Override
    public Computer builderComputer() {
        return c ;
    }
}
package com.ual.builder;


//建造者
public class Director {
        public  static  Computer constructorComputer(buider b){//这里传入的是抽象接口声明
            b.builderMainBoard();
            b.builderHD();
            b.builderCpu();
            return  b.builderComputer();
        }
}
package com.ual.builder;

public class Test {
    @org.junit.Test
    public void test(){
        Computer computer = Director.constructorComputer(new ComputerBuilder());
        System.out.println(computer);
        Computer computer1 = Director.constructorComputer(new ComputerBuilder1());
        System.out.println(computer1);
    }
}

技术分享图片

建造者模式

原文:https://www.cnblogs.com/UalBlog/p/10638635.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!