本文由 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();
        
    }
    
}

colodoo_纸伞
1 声望3 粉丝

每天进步一点点。