一个基础接口定义了功能,每个实现接口的子类就是产品,然后定义一个工厂接口,实现了工厂接口的就是工厂,这时候,接口编程的优点就出现了,我们可以新增产品类(只需要实现产品接口),只需要同时新增一个工厂类,客户端就可以轻松调用新产品的代码。
抽象工厂的灵活性就体现在这里,无需改动原有的代码,毕竟对于客户端来说,静态工厂模式在不改动StaticFactory类的代码时无法新增产品,如果采用了抽象工厂模式,就可以轻松的新增拓展类。
/** * 食物方法接口 * */ public interface Food { } /** * 生产方法 * */ public interface Produce { Food get(); } /** * 食物A * */ class A implements Food { } /** * 食物B * */ class B implements Food { } /** * 食物A生产工厂 * */ class FactoryForA implements Produce { @Override public Food get() { return new A(); } } /** * 食物B生产工厂 * */ class FactoryForB implements Produce { @Override public Food get() { return new B(); } } /** * 抽象工厂 * @author 尘世间迷茫的小书童 * */ public class AbstractFactory { public static void main(String[] args) { Food a = new FactoryForA().get(); a = new FactoryForB().get(); } }