角色
抽象工厂:担任这个角色是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类都必须实现这个接口。
具体工厂:担任这个角色的是实现了抽象工厂接口的具体Java类。具体工厂角色含有与应用密切相关的逻辑,并且受到应用程序的调用来创建产品对象。
抽象产品:工厂方法模式所创建对象的超类型,也就是产品对象的共同父类或接口。
具体产品:这个角色实现了抽象产品接口。
结构图
抽象工厂:
package com.design.factorymethod;public interface Factory { Product createProduct();}
抽象产品:
package com.design.factorymethod;public interface Product { void productInfo();}
具体产品:
package com.design.factorymethod;public class ProductA implements Product { @Override public void productInfo() { System.out.println("Product A"); }}
package com.design.factorymethod;public class ProductB implements Product { @Override public void productInfo() { System.out.println("Product B"); }}
具体工厂:
package com.design.factorymethod;public class FactoryA implements Factory { @Override public Product createProduct() { return new ProductA(); }}
package com.design.factorymethod;public class FactoryB implements Factory { @Override public Product createProduct() { return new ProductB(); }}
测试:
package com.design.factorymethod;public class Client { private static Factory factoryA, factoryB; private static Product productA, productB; public static void main(String[] args){ factoryA = new FactoryA(); factoryB = new FactoryB(); productA = factoryA.createProduct(); productB = factoryB.createProduct(); productA.productInfo(); productB.productInfo(); }}
输出:
工厂方法模式和简单工厂模式的区别:工厂方法模式的核心是一个抽象工厂类,而简单工厂模式的核心是一个具体类