博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图解设计模式-factory Method模式
阅读量:6233 次
发布时间:2019-06-21

本文共 2112 字,大约阅读时间需要 7 分钟。

用Template Method模式构建生成实例的工厂。
在factory method模式中,父类决定实例的生成方式,但是不决定所要生成的具体类,具体的处理交给子类负责。
 
角色:
Product产品:它定义了在Factory Method模式中的生成的那些实例所持有的接口,由Product类扮演。
Creator创建者:负责生成Product角色的抽象类,由Factory类扮演。
ConcreteProduct具体产品:决定具体的产品,由IDCard类扮演。
ConcreteCreator具体创建者:负责生成具体的产品,有IDCardFactory类扮演此角色。
 
优点:
提供统一实例工厂的框架。
框架与具体实现分开:可以根据不同产品类、创建不同的产品工厂,例如下面代码是IDCard产品与IDCardFactory产品工厂,也可以创建其他的产品和产品工厂。
框架:Product产品抽象类、Factory工厂抽象类
具体实现:IDCard产品类、IDCardFactory产品工厂类
 
代码:
public abstract class Factory {    public final Product create(String owner) {        Product product = createProduct(owner);        register(product);        return product;    }    public abstract Product createProduct(String owner);    public abstract void register(Product product);}
public abstract class Product {    public abstract void use();}
public class IDCard extends Product {    private String owner;    public 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 {    List owners = new ArrayList<>();    @Override    public Product createProduct(String owner) {        return new IDCard(owner);    }    @Override    public void register(Product product) {        owners.add(((IDCard)product).getOwner());    }}
public class Main {    public static void main(String[] args){        Factory factory = new IDCardFactory();        Product product1= factory.create("s1");        Product product2= factory.create("s2");        Product product3= factory.create("s3");        product1.use();        product2.use();        product3.use();    }}
执行结果:
创建s1的ID卡
创建s2的ID卡
创建s3的ID卡
使用s1的ID卡
使用s2的ID卡
使用s3的ID卡
 
代码说明:
Factory抽象类中的create方法定义了创建实例的流程,即调用方法的顺序,先调用createProduct创建产品,在调用register方法把创建的产品进行保存(保存在哪里由具体的工厂决定)。
Product抽象类中use方法定义了被工厂创建的实例中的使用方法,即use方法。(具体实例中方法不用,只起到测试作用,用于确认工厂确实可以创建实例并且调用到对应方法)
IDCardFactory类继承了Factory抽象类,定了createProduct和register方法的具体实现,把创建的实例保存到List集合中。

转载于:https://www.cnblogs.com/use-D/p/9563120.html

你可能感兴趣的文章
iOS手势识别的详细使用(拖动,缩放,旋转,点击,手势依赖,自定义手势)
查看>>
详细解析:如何制作嵌入式Linux文件系统
查看>>
C# 两个独立exe程序直接通信
查看>>
【Unity3d】【项目学习心得】从资源server下载资源(一)
查看>>
C# WinForm 技巧八:界面开发之“WeifenLuo.WinFormsUI.Docking+OutLookBar” 使用
查看>>
Image Wall - jQuery & CSS3 图片墙效果
查看>>
使用ffmepg的lib库调试,debug版本下调试无问题,但release版本会出现跑飞的现象...
查看>>
IOS多线程 总结 -------------核心代码(GCD)
查看>>
SSL连接建立过程分析(1)
查看>>
[CI]CodeIgniter快速开发指南
查看>>
PowerDesigner中创建Oracle表全过程记录
查看>>
mysql中char,varchar,text区别总结
查看>>
宝宝日记
查看>>
Query Designer:Variable 变量
查看>>
python进阶八_警告和异常
查看>>
Tomcat JVM
查看>>
基础才是重中之重~多线程的代价~我的内存都被吃了!
查看>>
学习boost::asio一些小例子
查看>>
[转]Linq 如何实现 in 与 not in
查看>>
怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障
查看>>