当前位置: 首页 > news >正文

设计模式学习笔记(2) - 工厂方法模式

工厂方法模式

  • 工厂方法就是创建了很多的工厂用来生产不同的产品。

用一个例子来说明一下:

 
  
  1. // 工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。 
  2. // 核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口, 
  3. // 这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。 
  4.  
  5. // ----------------------------------------------------------------- 
  6.  
  7. // 定义了手机接口 
  8. interface Mobile  
  9.     public function name(); 
  10.  
  11. // 实现手机接口,具体的手机 
  12.  
  13. // 摩托罗拉的手机 
  14. class MotorolaMobile implements Mobile 
  15.     public function name()  
  16.     { 
  17.         echo "Motorola Mobile\n"
  18.     } 
  19.  
  20. // 诺基亚的手机 
  21. class NokiaMobile implements Mobile 
  22.     public function name() 
  23.     { 
  24.         echo "Nokia Mobile\n"
  25.     } 
  26.  
  27. // ----------------------------------------------------------------- 
  28.  
  29. // 定义了工厂接口 
  30. interface MobileFactory 
  31.     public function product(); 
  32.  
  33. // 实现具体的手机工厂 
  34.  
  35. // 摩托罗拉的工厂 
  36. class MotorolaFactory implements MobileFactory  
  37.     public function product()  
  38.     { 
  39.         return new MotorolaMobile(); 
  40.     } 
  41.  
  42. // 诺基亚的工厂 
  43. class NokiaFactory implements MobileFactory 
  44.     public function product() 
  45.     { 
  46.         return new NokiaMobile(); 
  47.     } 
  48.  
  49. // ----------------------------------------------------------------- 
  50.  
  51. // 不同的工厂生产不同的产品 
  52. $MotorolaFactory = new MotorolaFactory(); 
  53. $mobile = $MotorolaFactory->product(); 
  54. $mobile->name(); 
  55.  
  56. $NokiaFactory = new NokiaFactory(); 
  57. $mobile = $NokiaFactory->product(); 
  58. $mobile->name(); 

输出结果:

 
  
  1. Motorola Mobile 
  2. Nokia Mobile 

从上例可以看到,现在产品是由多个工厂生产,每个工厂生产的产品都不一样,但产品都含有共同的name方法。

对于工厂的product方法可以带上参数,也应用动态创建实例的方式来实现各品牌不同型号的手机的生产。










本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1032721,如需转载请自行联系原作者

相关文章:

  • linux 淘宝开源监控工具tsar
  • Windows Server 2016 Storage Replica
  • 用MVC做支付宝手机网页支付问题
  • .net core Swagger 过滤部分Api
  • 一位台湾学校校长的演讲
  • k8s使用glusterfs实现动态持久化存储
  • MFC CListCtrl 表格
  • Semaphore
  • L1与L2正则化
  • centos7配置postfix dovecot cyrus-sasl foxmail
  • python利用openpyxl库操作Excel来读取、修改、写入测试数据
  • nginx添加几十个域名
  • ffmpeg获取视频封面图片
  • 源码包安装 以及升级内核 上课内容
  • 实现 el-table 拖拽行排序,并获取当前拖拽行的数据传入服务器
  • 深入了解以太坊
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 2018一半小结一波
  • CentOS6 编译安装 redis-3.2.3
  • Docker入门(二) - Dockerfile
  • IOS评论框不贴底(ios12新bug)
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript设计模式之工厂模式
  • JS专题之继承
  • mac修复ab及siege安装
  • mongo索引构建
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 成为一名优秀的Developer的书单
  • 猴子数据域名防封接口降低小说被封的风险
  • 解析带emoji和链接的聊天系统消息
  • 如何编写一个可升级的智能合约
  • 软件开发学习的5大技巧,你知道吗?
  • 时间复杂度与空间复杂度分析
  • 协程
  • 用Visual Studio开发以太坊智能合约
  • 智能合约开发环境搭建及Hello World合约
  • Spring第一个helloWorld
  • 数据可视化之下发图实践
  • ​用户画像从0到100的构建思路
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (ZT)薛涌:谈贫说富
  • (分布式缓存)Redis持久化
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)WLAN定义和基本架构转