设计模式-建造者模式

设计模式-建造者模式

1、建造者模式(builder):将一个复杂的对象构造与其表示分离,使得同样的构造过程可以创建不同的表示。其实就是将一个复杂对象分离,也就是解耦,用的时候可以自由组合,实现代码复用。
2、优缺点
优点

  • 构造者是独立的,所以容易扩展
  • 实现了代码的复用、利于系统解耦

缺点

  • 产品的使用范围有限,因为产品的组成必须相同

产品调用入口

package com.example.designpattern.builder;

public class BuilderMain {
    public static void main(String[]args)
    {
        try
        {
            //第一种房子规格
            Builders builders = new SpecificBuilders1();
            ProjectManager m = new ProjectManager();
            m.buildHouse(builders).show();

            //第二种房子规格
            builders = new SpecificBuilders2();
            m.buildHouse(builders).show();
        }
        catch (Exception exception){

        }
    }
}

抽象建筑者

package com.example.designpattern.builder;

public abstract class Builders {
    //创建一个房子
    protected House house = new House();
    public abstract void buildWall();
    public abstract void buildFoundation();
    public abstract void buildFurniture();
    //返回房子对象
    public House getHouse() {
        return house;
    }
}

具体产品

package com.example.designpattern.builder;

public class House {

    private String foundation;//地基
    private String wall;//墙
    private String furniture;//家具

    public String getFoundation() {
        return foundation;
    }

    public void setFoundation(String foundation) {
        this.foundation = foundation;
    }

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }

    public String getFurniture() {
        return furniture;
    }

    public void setFurniture(String furniture) {
        this.furniture = furniture;
    }

    public void show() {

        System.out.println(wall + foundation + furniture);
    }
}

项目经理

package com.example.designpattern.builder;

public class ProjectManager {
    //产品构建与组装方法
    public House buildHouse(Builders builders) {
        builders.buildWall();
        builders.buildFoundation();
        builders.buildFurniture();
        return builders.getHouse();
    }
}

第一个房子的建造者

package com.example.designpattern.builder;

public class SpecificBuilders1 extends Builders{
    @Override
    public void buildWall() {
        house.setFoundation("12墙");
    }

    @Override
    public void buildFoundation() {
        house.setWall("1米");
    }

    @Override
    public void buildFurniture() {
        house.setFurniture("半实木");
    }
}

第二种房子的建造者

package com.example.designpattern.builder;

public class SpecificBuilders2 extends Builders{
    @Override
    public void buildWall() {
        house.setFoundation("24墙");
    }

    @Override
    public void buildFoundation() {
        house.setWall("3米");
    }

    @Override
    public void buildFurniture() {
        house.setFurniture("全实木");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值