Design patterns 抽象工厂

例子

以下设计模式被归类为创建模式。

抽象工厂用于提供用于创建相关对象系列的接口,无需指定具体类,并可用于隐藏特定于平台的类。

interface Tool {
    void use();
}

interface ToolFactory {
    Tool create();
}

class GardenTool implements Tool {

    @Override
    public void use() {
         // 做点什么...
    }
}

class GardenToolFactory implements ToolFactory {

    @Override
    public Tool create() {
        // 也许需要额外的逻辑来设置...
        return new GardenTool();
    }
}

class FarmTool implements Tool {

    @Override
    public void use() {
        // 做点什么...
    }
}

class FarmToolFactory implements ToolFactory {

    @Override
    public Tool create() {
        // 也许需要额外的逻辑来设置...
        return new FarmTool();
    }
}

然后将使用某种供应商/生产商,这些供应商/生产商将传递信息,使其能够返回正确类型的工厂实现:

public final class FactorySupplier {

    // 它可以为您提供的支持类型...
    public enum Type {
        FARM, GARDEN
    };

    private FactorySupplier() throws IllegalAccessException {
        throw new IllegalAccessException("Cannot be instantiated");
    }

    public static ToolFactory getFactory(Type type) {

        ToolFactory factory = null;

        switch (type) {
        case FARM:
            factory = new FarmToolFactory();
            break;
        case GARDEN:
            factory = new GardenToolFactory();
            break;
        } // 可能会添加一个默认情况来处理传入 null 的人

        return factory;
    }
}