《图解设计模式》读书笔记2-2 Factory Method模式

类图

代码

//产品类,任意可“use”的产品都可继承该类
public abstract class Product {
    public abstract void use();
}

//工厂类
//定义了创建一个产品的流程,具体的创建代码需要子类实现
public abstract class Factory {
    public final Product create(String owner) {
        Product p = createProduct(owner);
        registerProduct(p);
        return p;
    }

    protected abstract Product createProduct(String owner);
    protected abstract void registerProduct(Product product);
}

//一个具体的产品类
public class IDCard extends Product {
    private String owner;
    IDCard(String owner) {
        System.out.println("制作"+owner+"的ID卡");
        this.owner = owner;
    }

    @Override
    public void use() {
        System.out.println("使用"+owner+"的ID卡");
    }

    public String getOwner() {
        return owner;
    }
}

//生产IDCard的工厂类
public class IDCardFactory extends Factory {
    private List owners = new ArrayList();

    @Override
    protected Product createProduct(String owner) {
        return new IDCard(owner);
    }

    @Override
    protected void registerProduct(Product product) {
        owners.add(((IDCard)product).getOwner());
    }

    public List getOwners() {
        return owners;
    }
}

角色介绍

  • Product:是一个抽象类,定义了在工厂方法模式中生成的类所具有的接口(API)

  • Creator:负责生成Product角色的抽象类。不用new关键字生成实例,而是调用生成实例的方法来创建实例,防止基类和其他具体的类耦合。它只知道调用方法可以生成实例,对具体生成实例的ConcreteCreator一无所知,对具体方法的实现也一无所知。

  • ConcreteProduct:具体的产品类。

  • ConcreteCreator:具体的创建产品类的工厂。

思想

  • 通过继承Product和Creator,我们可以创建各种各样的具体的工厂和产品,Product和Creator无需关心具体实现,他们不依赖于具体的工厂和产品的实现。

  • 可以将Product和Creator封装成一个框架,需要的时候直接引入,继承即可。

posted on 2019-06-09 10:59  vplus  阅读(169)  评论(0编辑  收藏  举报