您的位置:首页 > 编程语言 > Java开发

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

2018-04-01 14:09 204 查看
本人所学设计模式皆出自于 结城浩先生的《图解设计模式》。

类图



为什么使用工厂模式

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

示例代码

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

结果

正在生产:张三 的身份证
张三的身份证正在被使用
正在生产:李四 的身份证
李四的身份证正在被使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: