问题

当代码运行时我们才知道要生成的对象类型(BlogApptEncoder或者MegaBlogApptEncoder)

我们需要能够相对轻松的加入一些新的产品类型(如一种新业务处理方式SyncMl)

每一个产品类型都可定制特定的功能(getHeaderText()和getFooterText())

实现

<?php
/*factory_method.php
工厂方法模式把创建者与要生产的产品类分离开,
创建者是一个工厂类,定义了用于生成产品对象的类方法,
如果没有提供默认实现,那就有创建者的子类来执行实例化
一般情况下创建者的每个子类实例化一个相应的产品子类
*///产品类
abstract class AppenCoder{abstract function encode();
}class BlogsAppEncoder extends AppenCoder{function encode(){return "Appointment data encode in Blogs";}
}//创建者,工厂类(用于生成对象的类)
abstract class CommonManager{abstract public function getHearText();//生成产品对象的类方法abstract public function getAppEncoder();abstract public function getFooterText();
}class BlogsManager extends CommonManager{public function getHearText(){return "BlogsCal header";}/*子类实例化一个产品子类*/public function getAppEncoder(){return new BlogsAppEncoder();}public function getFooterText(){return "BlogsCal Footer";}
}
$create = new BlogsManager();
$obj = $create->getAppEncoder();//得到一个生成的产品对象
echo $obj ->encode();
?>

uml

结果

创建者类与产品的层次结构相似,导致特殊代码重复

导致不必要的子类化

转载于:https://www.cnblogs.com/rcjtom/p/6055066.html

生成对象---工厂方法模式相关推荐

  1. 简单工厂模式,工厂方法模式,抽象工厂方法的具体实现

    1.题目分析 简单工厂模式:首先定义一个Nvwa的接口,里面定义一个show()的抽象方法.再定义Man.Woman和Robot三个类分别继承Nvwa这个接口,并重写show()方法.再定义一个cre ...

  2. 设计模式---3(工厂方法模式的概念,工厂方法模式的实现,工厂方法模式和简单工厂模式比较)

    工厂方法模式 概念 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 . 工厂方法模式的意义 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责产品的创建,这样核 ...

  3. 研磨23种大话设计模式------简单工厂模式 + 工厂方法模式 + 抽象工厂模式

    大家好,我是一位在java学习圈中不愿意透露姓名并苟且偷生的小学员,如果文章有错误之处,还望海涵,欢迎多多指正 如果你从本文 get 到有用的干货知识,请帮忙点个赞呗,据说点赞的都拿到了offer 简 ...

  4. 将实例的生成交给子类——工厂方法模式

    工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到子类. 工厂方法实现时,由客户端决定实例化哪个工厂来实现具体的产品类, ...

  5. 设计模式之工厂方法模式(Factory Method)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  6. android 工厂方法模式应用场景,Android设计模式(四)- 工厂方法模式

    目录 定义 使用场景 UML 模式1 模式2 模式3 简单工厂模式静态工厂模式 简单实现 Android源码中的工厂方法 总结 优点 缺点 工厂方法模式也是创建型模式. 工厂模式根据抽象程度可以分为三 ...

  7. 设计模式之工厂方法模式学习笔记

    定义 定义一个用于创建对象的接口,让子类去决定是实现哪个类.工厂方法使类的实例化,延迟到了子类. 结构图 角色拆解分析: 1.Product:抽象产品类 2.ConcrereProduct:具体产品类 ...

  8. 抽象工厂模式-与-工厂方法模式区别

    转自:http://blog.csdn.net/wangwenhui11/article/details/3955125 --------------------------------- 对于jav ...

  9. 抽象工厂模式java_面试官:说一下静态工厂模式,工厂方法模式,抽象工厂的区别吧...

    静态工厂模式 用生活中的场景类比一下这三种模式,假如你想学习Java视频,你得自己到处去找资料,找资料是一个繁琐的过程,过一段时间你又想学Python视频了,你还得去找资料.现在你在学校上学,你想学J ...

最新文章

  1. teach-es6-2(class)
  2. 速读训练软件_记忆力训练:如何提高注意力呢?
  3. android软件开发考试,Android软件工程师笔试题(全选择题)【0-1年经验】
  4. 用Python分析元旦旅游热门城市,告诉你哪些景点性价比更高
  5. mysql导出bacpac_数据库的迁移
  6. easyPR源码解析之ann_train.h/config.h
  7. Android内存泄漏的各种原因详解
  8. mysql-使用存储过程一次性批量创建多张表
  9. C - 查找回文质数
  10. java命令行参数args_Args4J (Java 命令行参数控制开源项目) 使用指南
  11. webpack分离打包css和less
  12. swagger - RESTFUL接口文档在线自动生成、代码自动生成工具详解
  13. 2011年Esri用户大会技术亮点总结之一:概览
  14. 解惑:Redis的HSCAN命令中COUNT参数的失效场景
  15. 如何通过Google学术快速获取参考文献引用格式-2021年
  16. 聋校计算机教学案例,聋校汉语拼音b、p的教学案例
  17. 问题记录:系统还原后,QQ显示一直登录中,但却登录不上去,而且很多软件无法使用
  18. elasticsearch OOM
  19. PDF预览完整解决方案及各种兼容(VUE版)
  20. 关于Fiddler使用和答疑

热门文章

  1. 如何选专业选课题?姚期智院士:首先成为一名科学家
  2. AI医疗领域人才需求与培养趋势分析
  3. 清华“姚班”迎来00后,高校与企业共破AI人才荒
  4. 受益终生的世界顶级八大思维
  5. 法媒评马云996:亚洲独有的洗脑我们不懂
  6. Linux vim编辑器命令总结(转载)
  7. imp 只导入索引_使用imp导入表和索引至不同表空间方法
  8. ibm java_IBM i 上Java 虚拟机简介
  9. python无穷大整数_python的特殊数字类型(无穷大、无穷小等)
  10. c语言socket原理,Socket底层原理