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

Main

public class Main {
    public static void main(String[] args) {
        ExampleBuild exampleBuild = new ExampleBuild();
        exampleBuild.addExample(new Example1());
        exampleBuild.addExample(new Example2());
        exampleBuild.addExample(new Example3());
        float num = exampleBuild.getNum();
        System.out.println(num);
    }
}

ExampleInterface

public interface ExampleInterface {
    public String name();
    public float price();
}

Example1

public class Example1 implements ExampleInterface {
    @Override
    public String name() {
        return "Example1";
    }
    @Override
    public float price() {
        return 1;
    }
}

Example2

public class Example2 implements ExampleInterface {

    @Override
    public String name() {
        return "Example2";
    }

    @Override
    public float price() {
        return 2;
    }
}

Example3

public class Example3 implements ExampleInterface {

    @Override
    public String name() {
        return "Example3";
    }

    @Override
    public float price() {
        return 3;
    }
}

ExampleBuild

public class ExampleBuild {

    private List<ExampleInterface> exampleList = new ArrayList<ExampleInterface>();
    //添加
    public void addExample(ExampleInterface exampleInterface){
        exampleList.add(exampleInterface);
    }
    //获取所有数量
    public float getNum(){
        float num = 0.0f;
        for (ExampleInterface exampleInterface : exampleList) {
            num += exampleInterface.price();
        }
        return num;
    }
}