共计 1548 个字符,预计需要花费 4 分钟才能阅读完成。
本文由 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();}
}
正文完