Factroy 简单工厂
2016-07-14 10:58
239 查看
意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的实例化延迟到其子类。动机
框架使用抽象类定义和维护对象之间的关系。这些对象的创建通常也由框架负责。框架必须实例化类,但是它只知道不能被实例化的抽象类。适用性
当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。
当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
结构
参与者
Product:定义工厂方法所创建的对象的接口ConcreteProduct:实现Product接口
Creator:声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcretePruduct实例
ConcreteCreator:重定义工厂方法以返回一个ConcreteProduct实例
协作
Creator依赖于它的子类来定义工厂方法,所以它返回一个适当的ConcreteProduct实例实现
主要有两种不同的情况:1)第一种情况是,Creator类是一个抽象类并且不提供它所声明的工厂方法的实现。
2)第二种情况是,Creator是一个具体的类而且为工厂方法提供一个缺省的实现。
//MyProduct和YourProduct是Product的子类 class Creator { public: virtual Proruct * Create(PruductId); }; Product * Creator::Create(ProductId id) { if (id == MINE) return new MyProduct; if (id == YOURS) return new YourProduct; return 0; }
子类MyCreator可以减缓MyProduct和YourProduct并且支持一个新的子类TheirProduct;最后返回父类的Create是它对其它类不感兴趣,交给父类Create处理:
Product * MyCreator::Create(ProductId id) { if (id == MINE) return new MyProduct; if (id == YOURS) return new YourProduct; if (id == THEIRS) return new TheirProduct; return Creator::Create(id); }
相关文章推荐
- 浅谈OCR之Tesseract
- fgets代替gets
- YUV视频格式到RGB32格式转换的速度优化 上篇
- java 计算时间差(显示形式 :如1天2小时30分钟 )
- Android Handler内部类+WeakReference
- hdu 1213 并查集模板
- 【刷题之路】包含min函数的栈
- 安卓输入框加入清除按钮
- 一台机器运行多个JBoss多实例
- CodeForces 688A-Opponents
- sqlplus运行sql文件
- Hibernate @Transient
- js 怎么获得写在css文件中的display属性
- 无聊解一道数学题:喝农药杀人(这什么题目!!??)
- boostrap datetimepicker问题
- mongodb分片
- 在 ASP.NET MVC 项目中使用 WebForm
- 网易视频云:HBase最佳实践-列族设计优化
- 网易视频云:HBase最佳实践-列族设计优化
- CheckPoint Security Checkup 中文支持