关于java:设计模式笔记工厂模式

42次阅读

共计 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();}
    
}

正文完
 0