设计模式之建造者模式

建造者模式

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

有一种商品,它由AB两部分组成,现在客户端需要这个商品,我们来看看客户端怎么实现的:

interface Product{
    void partA();
    void partB();

}
//商品A
class ProductA implements Product{

    @Override
    public void partA() {
        System.out.println("Aa");

    }

    @Override
    public void partB() {
        System.out.println("Ab");
    }
}
//商品B
class ProductB implements Product{

    @Override
    public void partA() {
        System.out.println("Ba");
    }

    @Override
    public void partB() {
        System.out.println("Bb");
    }
}


public class Client {
    public static void main(String[] args) {
        Product a = new ProductA();//生成A商品的对象
        a.partA();
        a.partB();

        Product b = new ProductB();//生成B商品的对象
        b.partA();
        b.partB();

    }
}

客户端建造了两个商品A和B,但是这里客户端必须知道这种商品是由A和B两部分组成的,就好比你想吃汉堡,你去肯德基买,难道你需要分别买汉堡的配料吗?你只是想要个汉堡而已,你应该从肯德基哪里得到一个汉堡而不必关心它是怎么做出来的。所以这个产品的具体建造细节客户端是不必知道的。

让我们稍作修改

interface Product{
    void partA();
    void partB();
}

class ProductA implements Product{

    @Override
    public void partA() {
        System.out.println("Aa");

    }

    @Override
    public void partB() {
        System.out.println("Ab");
    }

}

class ProductB implements Product{

    @Override
    public void partA() {
        System.out.println("Ba");
    }

    @Override
    public void partB() {
        System.out.println("Bb");
    }
}
//指挥者类 用来根据用户的需求来创建A或B商品
class Director{
    public void creat(Product product){
        product.partA();
        product.partB();
    }
}

public class Client {
    public static void main(String[] args) {
        Director director = new Director();
        
        Product a = new ProductA();
        director.creat(a);
        Product b = new ProductB();
        director.creat(b);

    }
}

我们增加一个指挥者类让它去实现建造过程,客户端想要一个产品A,指挥者类就给你建造一个A,客户端不必需要知道这个A的具体建造细节。

posted @ 2020-10-01 10:17  xxgbl  阅读(121)  评论(0)    收藏  举报