Java-设计模式-第四篇-工厂模式
2018-04-01 14:09
204 查看
本人所学设计模式皆出自于 结城浩先生的《图解设计模式》。
![](https://img-blog.csdn.net/20180401133054238)
类图
为什么使用工厂模式
在工厂模式中,父类决定实例生成的方式,但不决定所要生成的具体类,具体的处理全部交给子类。这样就可以将生成实例的框架和实际负责生成实例的类解耦。示例代码
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(); } }
结果
正在生产:张三 的身份证 张三的身份证正在被使用 正在生产:李四 的身份证 李四的身份证正在被使用
相关文章推荐
- JAVA设计模式(工厂模式)
- java设计模式-工厂模式
- java设计模式之一工厂模式(Factory Method)
- java设计模式之一工厂模式(Factory Method)
- java设计模式—工厂模式
- JAVA设计模式---工厂模式(简单笔记)
- JAVA设计模式之---工厂模式
- 学习:java设计模式—工厂模式
- Java设计模式—工厂模式
- java设计模式之----工厂模式
- java 设计模式 工厂模式
- JAVA设计模式(工厂模式)
- java设计模式之一工厂模式(Factory Method)
- java设计模式之一工厂模式(Factory Method)
- Java设计模式——工厂模式
- JAVA设计模式——工厂模式
- Java-设计模式-工厂模式浅谈(二)-工厂方法模式
- java设计模式—工厂模式
- Java 设计模式—工厂模式(三种方式)
- java 设计模式-工厂模式