本文由 colodoo(纸伞)整顿
参考书籍《图解设计模式》
QQ 425343603
Java学习交换群(717726984)
工厂模式
- Product(产品)
- Creator(创建者)
- ConcreteProduct(具体的产品)
ConcreteCreator(具体的创建者)
Product(产品)
Product角色属于框架这一方,是一个抽象类。
Creator(创建者)
Creator角色属于框架这一方,它是负责生成Product角色的抽象类,但具体的解决则由子类ConcreteCreator角色决定。
ConcreteProduct(具体的产品)
ConcreteProduct角色属于具体加工这一方,他决定了具体产品。
ConcreteCreator(具体的创造者)
ConcreteCreator角色属于具体加工这一方,它负责生成具体的产品。
类图
代码样例
/** * 工厂抽象类 * * @author colodoo(纸伞) **/public abstract class Factory { // 创立 public final Product create(String owner) { Product product = new createProduct(owner); registerProduct(product); return product; } // 创立产品 protected abstract Product createProduct(String owner); // 注册产品 protected abstract void registerProduct(Product product); }
/** * 具体工厂类 * * @author colodoo(纸伞) **/public class ConcreteFactory extends Factory { private List owners = new ArrayList(); // 创立产品 protected Product createProduct(String owner) { return new ConcreteProduct(owner); } // 注册产品 protected void registerProduct(Product product) { owners.add(((ConcretedProduct) product).getOnwer()); } // 获取拥有者列表 public List getOwners() { return owners; } }
/** * 产品抽象类 * * @author colodoo(纸伞) **/public abstract class Product { // 应用 public abstract void use(); }
/** * 具体产品类 * * @author colodoo(纸伞) **/public class ConcreteProduct extends Product { // 拥有者 private String owner; // 构造方法 public ConcreteProduct(String owner) { this.owner = owner; } // 获取拥有者 public String getOwner() { return this.owner; } // 应用 public void use() { // 解决逻辑 // TODO System.out.println("应用产品"); } }
public class Main { public static void main(String[] args) { Factory factory = new ConcreteFactory(); Product prodcut1 = factory.create("1"); Product prodcut2 = factory.create("2"); prodcut1.use(); prodcut2.use(); } }