天天5分鐘-建造者模式

建造者模式


什麼是建造者模式呢,顧名思義,把某個東西建立出來,說得準確點是,把各類部件按照須要的方式建形成一個產品。建造者模式須要四個類,抽象建造者,具體建造者,產品類,導演類java

產品類:

public class Phone {
    //手機的部件
    private String cpu;
    private String screen;
    private String camera;
    
    //對部件的邏輯處理
    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public void setScreen(String screen) {
        this.screen = screen;
    }
    
    public void setCamera(String camera) {
        this.camera = camera;
    }
    
    public String use() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", screen=" + screen +
                ", camera=" + camera +
                '}';
    }
    
}

抽象建造者類:

public abstract class AbstractBuilder {
    
    //多個部件供咱們組合成不一樣的產品
    public abstract void midCpu();
    public abstract void midScreen();
    public abstract void midCamera();
    public abstract void topCpu();
    public abstract void topScreen();
    public abstract void topCamera();

    //組合完成後返回產品類
    public abstract Phone buildPhone();

}

具體建造者類:

注意並非具體的產品,而是具體的廠商,生產不一樣品牌部件的建造者,在本例中有兩個具體建造者類,一個是生產一加的各部件,一個是生產魅族的各部件。ide

public class OnePlusBuilder extends AbstractBuilder {

    Phone phone = new Phone();

    @Override
    public void midCpu() {
        phone.setCpu("一加高配處理器");
    }

    @Override
    public void midScreen() {
        phone.setScreen("一加高配屏幕");
    }

    @Override
    public void midCamera() {
        phone.setCamera("一加高配相機");
    }

    @Override
    public void topCpu() {
        phone.setCpu("一加頂配處理器");
    }

    @Override
    public void topScreen() {
        phone.setScreen("一加頂配屏幕");
    }

    @Override
    public void topCamera() {
        phone.setCamera("一加頂配相機");
    }

    @Override
    public Phone buildPhone() {
        return phone;
    }
}
public class MeizuBuilder extends AbstractBuilder {
    Phone phone = new Phone();

    @Override
    public void midCpu() {
        phone.setCpu("魅族中配處理器");
    }

    @Override
    public void midScreen() {
        phone.setScreen("魅族中配屏幕");
    }

    @Override
    public void midCamera() {
        phone.setCamera("魅族中配相機");
    }

    @Override
    public void topCpu() {
        phone.setCpu("魅族高配處理器");
    }

    @Override
    public void topScreen() {
        phone.setScreen("魅族高配屏幕");
    }

    @Override
    public void topCamera() {
        phone.setCamera("魅族高配相機");
    }

    @Override
    public Phone buildPhone() {
        return phone;
    }
}

導演類:

導演嘛,很形象,指揮要建造什麼具體的產品測試

director-builder

public class Director {
    AbstractBuilder builder;

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

    public Phone buildMidPhone() {
        builder.midCpu();
        builder.midCamera();
        builder.midScreen();
        return builder.buildPhone();
    }

    public Phone buildTopPhone() {
        builder.topCpu();
        builder.topCamera();
        builder.topScreen();

        return builder.buildPhone();
    }

}

如今不是都說手機是堆料嘛,導演類就負責,我可以用不一樣的料,甚至一樣的料不一樣的堆積方法來給你堆出不一樣的產品。ui

像上面的例子中,我有6個部件,可是不一樣的部件我可以生產不一樣的產品。this

測試類:

public class Test {
    public static void main(String[] args) {
        Director director = new Director(new OnePlusBuilder());
        System.out.println(director.buildMidPhone().use());
        System.out.println(director.buildTopPhone().use());

        director = new Director(new MeizuBuilder());
        System.out.println(director.buildMidPhone().use());
        System.out.println(director.buildTopPhone().use());
    }
}

與工廠模式的區別:

二者比較類似,可是不一樣的點仍是比較清晰。spa

  • 工廠模式注重的是個體,你要什麼手機,我就生產一部手機出來給你,沒必要要關心你內部的部件是怎樣組合的,一般是一個方法生產一個產品。
  • 建造者模式就不同了,注重的是部件的組合,不一樣的部件組合能夠生產出來不同的產品,一般是幾個方法的整合次啊能生產一個產品

dianzan

相關文章
相關標籤/搜索