Java-设计模式-第四篇-工厂模式

本人所学设计模式皆出自于 结城浩先生的《图解设计模式》。

类图

为什么使用工厂模式

        在工厂模式中,父类决定实例生成的方式,但不决定所要生成的具体类,具体的处理全部交给子类。这样就可以将生成实例的框架和实际负责生成实例的类解耦。

示例代码

        
package com.qiang.framework;

/**
 * 抽象工厂
 *
 * @author zhangxinqiang
 * @date 01/04/2018
 */
public abstract class Factory {
    /**
     * 模板模式调用 用来常见一个产品,并且加入工厂记录
     *
     * @param owner 根据自己所需随意增加参数
     * @return 创建的产品
     */
    public final Product create(String owner) {
        Product product = createProduct(owner);
        registerProduct(product);
        return product;
    }

    /**
     * 创建商品的抽象方法
     *
     * @param owner 根据自己所需随意增加参数
     * @return 产品
     */
    protected abstract Product createProduct(String owner);

    /**
     * 注册商品的抽象方法
     *
     * @param product 当前创建的产品
     */
    protected abstract void registerProduct(Product product);
}
package com.qiang.framework;

/**
 * 抽象产品
 *
 * @author zhangxinqiang
 * @date 01/04/2018
 */
public abstract class Product {
    /**
     * 产品应有的共性功能
     */
    public abstract void use();
}
package com.qiang.factory;

import com.qiang.framework.Product;

/**
 * 产品-身份证
 *
 * @author zhangxinqiang
 * @date 01/04/2018
 */
public class IdCard extends Product {
    private String owner;

    public IdCard(String owner) {
        System.out.println("正在生产:" + owner + " 的身份证");
        this.owner = owner;
    }

    @Override
    public void use() {
        System.out.println(owner + "的身份证正在被使用");
    }

    public String getOwner() {
        return owner;
    }
}
package com.qiang.factory;

import com.qiang.framework.Factory;
import com.qiang.framework.Product;

import java.util.ArrayList;
import java.util.List;

/**
 * 用来生产身份证的工厂
 *
 * @author zhangxinqiang
 * @date 01/04/2018
 */
public class IdCardFactory extends Factory {
    private List<IdCard> owner = new ArrayList<>();

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

    @Override
    protected void registerProduct(Product product) {
        owner.add((IdCard) product);
    }
}
package com.qiang;

import com.qiang.factory.IdCardFactory;
import com.qiang.framework.Factory;
import com.qiang.framework.Product;

/**
 * 测试类
 *
 * @author zhangxinqiang
 * @date 01/04/2018
 */
public class Test {
    public static void main(String[] args) {
        Factory idCardFactory = new IdCardFactory();
        Product product = idCardFactory.create("张三");
        product.use();
        Product lisi = idCardFactory.create("李四");
        lisi.use();
    }
}

结果

正在生产:张三 的身份证
张三的身份证正在被使用
正在生产:李四 的身份证
李四的身份证正在被使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值