本文由 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();
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。