设计模式

简单工厂模式(Factory Method)

2020-07-18  本文已影响0人  秀儿2020

定义

定义一个用于创建对象的接口,让子类决定实例化哪一个类,使得一个类的实例化可以延迟到子类实现。

本质

选择实现。

简单工厂的重点在于选择,实现是已经做好了的,目的在于为客户端来选择相应的实现,从而使得客户端和实现之间解耦,这样一来,实现发生了变化,就不用变更客户端了。

登场角色

示例代码

/**
 * 产品的抽象类,定义了产品的特性
 */
public abstract class Product {
    public abstract void use();
}


/**
 * 生成产品的抽象类,定义了生成产品的步骤
 */
public abstract class Factory {
    public final Product create(String owner){
        Product product = createProduct(owner);
        resisterProduct(product);
        return product;
    }
    protected abstract Product createProduct(String owner);
    protected abstract void resisterProduct(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;
    }
}


/**
 * 生成产品的工厂,实现了产品的生产过程
 */
public class IDCardFactory extends Factory{
    private List<String> owners = new ArrayList();
    @Override
    protected Product createProduct(String owner) {
        return new IDCard(owner);
    }

    public List<String> getOwners() {
        return owners;
    }

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


/**
 * 测试
 */
public class RunFactory {
    public static void main(String args[]){
        Factory factory = new IDCardFactory();
        Product idCard1 = factory.create("小明1");
        Product idCard2 = factory.create("小明2");
        Product idCard3 = factory.create("小明3");

        idCard1.use();
        idCard2.use();
        idCard3.use();
    }
}

运行结果

制作小明1的ID卡
制作小明2的ID卡
制作小明3的ID卡
使用了小明1的ID卡
使用了小明2的ID卡
使用了小明3的ID卡

功能

用来创建一个具体的类实例。

优点

缺点

何时使用

上一篇 下一篇

猜你喜欢

热点阅读