工厂方法及其设计原则
一、第一个设计模式原则:按接口编程
Interface IAlpha 接口名
Class Alpha 实现接口
Variable useAlpha 实例化新的Alpha
第二个设计模式原则:优先选择对象组合而不是类继承
在大程序当中,组合可以避免维护多个继承层次上的各个子类, 而且还可以避免可能导致的错误,例如:父类的一个改变会逐级向下传递到子类实现,这可能会影响子类使用的某个算法。
因此要避免使用继承形成一长串子类、孙子类、曾子类等,设计模式方法建议使用浅继承。
二、工厂方法:通过一个工厂(Creator)实例化对象,从而将实例化过程与请求者分离。
内容 |
1.、提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤; 2、工厂模式 实际上就是建立一个统一的类实例化的函数接口。统一调用,统一控制; 3、工厂模式是php项目开发中,最常用的设计模式,一般会配合单例模式一起使用,来加载php类库中的类。 |
应用场景 |
1. 我们拥有一个Json类,String类,Xml类。 2. 如果我们不使用工厂方式实例化这些类,则需要每一个类都需要new一遍,过程不可控,类多了,到处都是new的身影 3. 引进工厂模式,通过工厂统一创建对象实例。 //如果你希望实例化对象的子类可能发生变化就使用工厂模式 |
实例代码 |
1. <?php 2. //工厂模式 提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤 3. //字符串类 4. class String { 5. public function write() {} 6. } 7. //Json类 8. class Json { 9. public function getJsonData() {} 10. } 11. //xml类 12. class Xml { 13. public function buildXml() {} 14. } 15. //工厂类 16. class Factory { 17. public static function create($class) { 18. return new $class; 19. } 20. } 21. Factory::create("Json"); //获取Json对象 |
工厂的工作 |
第一步是建立工厂:creator接口(是模式中的第一个参与者,使用一个抽象类作为creator接口) abstract class creator { //构建并返回由一个按Product接口实现的产品对象 protected abstract function factoryMethod();//返回一个产品 public function startFactory(){ $mfg = $this->factoryMethod(); return $mfg;//返回一个产品(product) } } |
参数化工厂方法设计模式与一般的工厂方法设计模式的主要区别之一是客户包含工厂和产品的引用,在参数化请求中,Client必须指定产品,而不知是好产品工厂。
使用设计模式的一大好处就是可以很容易地对类做出改变,而不会破坏更大的程序,之所以能够做出改变,在于保持接口不变,只改变其内容。
工厂方法及其设计原则相关推荐
- 设计模式 工厂方法_使用工厂方法模式设计最佳实践
设计模式 工厂方法 在前面的"设计模式"示例中,我们解释了当今常用的"工厂"模式. 在本节中,我们将了解具有更多抽象的更高级的解决方案. 该模式称为工厂方法设计 ...
- 使用工厂方法模式设计最佳实践
在前面的"设计模式"示例中,我们解释了当今常用的"工厂"模式. 在本节中,我们将了解具有更多抽象的更高级的解决方案. 该模式称为工厂方法设计模式. 定义: Fa ...
- AD09 DXP保姆级教程系列——006、PCB布局、走线方法和设计原则基础
PCB布局:PCB布局需要先把元器件放置在合适的位置,具体根据设计的需要自行设计即可,尽量保持走短线, 好的布局是美观.使用.性能等多方面相平衡的结果 布局时候,选中元器件按下g键可以改变相关属性,空 ...
- 工厂三兄弟之工厂方法模式
本文转载自 :http://blog.csdn.net/lovelion/article/details/9306457 简单工厂模式虽然简单,但存在一个很严重的问题.当系统中需要引入新产品时,由于静 ...
- JAVA【设计模式】工厂方法模式
工厂方法模式 一.定义 二.示例: 传统硬编码方式(都在一个类里面实现,多重if else嵌套使用) 工厂方法模式设计 一.定义 ⼯⼚模式⼜称⼯⼚⽅法模式,是⼀种创建型设计模式,其在⽗类中提供⼀个创建 ...
- 工厂模式之静态工厂模式和工厂方法模式
1.简介 工厂模式作用:实现了创建者和调用者的分离 详细分类: 静态工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有的代码),又叫简单工厂模式 工厂方法模式:用来生产统一等级 ...
- week_06_动态代理,工厂方法,单例,File,IO,网络编程,反射,数据库语句
动态代理 动态代理核心思想: 再程序执行过程中通过一些特殊的方式产生代理 jdk动态代理: 前提必须有一个接口 java.lang.reflect.Proxy:提供了创建动态代理类和实例的静态方法 p ...
- 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例
文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...
- 优秀的API接口设计原则及方法
一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的 ...
最新文章
- OpenCV | 基于OpenCV的双目图像采集源代码(相机标定)
- git 怎么还原历史版本_4. Git--修改/回退等操作
- (原)举例说明C#自定义配置文件app.config及如何读取配置内容(在app.config加入自定义的XML节点)?...
- SparkSQL源代码:GlobalTempView与LocalTempView
- go语言 字符串处理
- 【Vue US国际会议】使用Vue和NativeScript来开发吸引人的原生手机app
- Windows 10官方镜像下载教程
- 实习日记(4-28)
- 什么是模拟信号?数字信号?区别是什么?它们又是如何完成转换的?
- 1957:【12NOIP普及组】质因数分解
- 数显之家快讯:【SHIO世硕心语】父亲的格局,母亲的情绪,是一个家最好的风水
- 将门CTO沈强:人工智能时代,技术创新将全面引爆商业变革
- HTML中使背景图片自适应浏览器大小
- 100本《架构师》迷你书——限时免费领取
- 用c语言编写界面,「分享」C语言如何编写图形界面
- ipv4和ipv6与int互转通用处理方式
- 看到越来越多的人用奇怪的域名,其中有china.xx之类的好域名。
- 【C语言】操作符 ~ ,二进制位按位取反
- opencv +Hog + SVM 车辆检测
- JS HTML标签尺寸距离位置定位计算
热门文章
- Vue中关于父子组件之间的通信
- html垂直军中,数字报纸HTML版本
- Dirichlet Process
- java的dao层_Java中Dao层、Action层、Service层、Controller层-Fun言
- java.net.SocketException: Unexpected end of file from server
- 01_前端笔记-web开发-网页三剑客-html标签
- max-width: 100%和width:100%的区别
- OLW发布到文章分类内测试,技术栈再到文章。
- 火星人培训python
- Qt项目如何插入库文件