设计模式一(抽象工厂模式)
1.抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。
使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需更改该工厂方法内容即可,不需逐一寻找代码中具体实例化的地方(new处)修改了。
为系统结构提供灵活的动态扩展机制,减少了耦合。
抽象多个工厂;
<?php /* interface是完全抽象的,只能声明方法,而且只能声明 public 的方法,不能声明 private 及 protected 的方法 不能定义方法体,也不能声明实例变量 。 interface 却可以声明常量变量 。 */ interface Car {const BIG=100; // public function getWidth(); //获取车宽度 不允许用private和protected修饰public function getHeight();//获取车高度 }interface Colors {public function setColor($c);public function getColor(); } /** 抽象工厂类的定义;必须实现车和颜色的interface接口 1.抽象类是和抽象方法 2.抽象类不能被直接实例化即new;抽象类中只定义(或部分实现)子类需要的方法。 子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化。 3.子类必须实现抽象类利所有抽象方法 4.抽象方法只能用public 和protected修饰 **/ abstract class AbstractFactory implements Car,Colors {//获取车的属性abstract public function getWidth();abstract public function getHeight();//获取车颜色abstract public function setColor($c);abstract public function getColor();public function getName(){return '宝马';} } /* 子类必须实现父类的抽象方法和接口的方法 */ class CarFactory extends AbstractFactory {protected $car_color;protected $h;protected $w;public function getWidth(){return 1000;}public function getHeight(){return 200;}public function setColor($c){}public function getColor(){return null;} }/* 子类必须实现父类的抽象方法和接口的方法 */ class ColorFactory extends AbstractFactory {protected $car_color;protected $h;protected $w;public function getWidth(){return null;}public function getHeight(){return null;}public function setColor($c){$this->car_color = $c;}public function getColor(){return $this->car_color;} }//实现生产车的类 class ProductCar {public static function getFactory($type){if($type=='car'){return new CarFactory();}elseif($type=='color'){return new ColorFactory();}} }//开始使用 //获取车属性 $fac_car = ProductCar::getFactory('car'); echo $fac_car->getWidth();//后去颜色属性 $fac_color = ProductCar::getFactory('color'); $fac_color->setColor('红色'); echo $fac_color->getColor();?>
实例2: 工厂模式的用示例
<?php header('Content-Type:text/html;charset=utf-8'); /***简单工厂模式(静态工厂方法模式)*/ /*** Interface people 人类*/ interface people {public function say(); } /*** Class man 继承people的男人类*/ class man implements people {// 具体实现people的say方法public function say(){echo '我是男人<br>';} } /*** Class women 继承people的女人类*/ class women implements people {// 具体实现people的say方法public function say(){echo '我是女人<br>';} } /*** Class SimpleFactoty 工厂类*/ class SimpleFactoty {// 简单工厂里的静态方法-用于创建男人对象static function createMan(){return new man();}// 简单工厂里的静态方法-用于创建女人对象static function createWomen(){return new women();} } /*** 具体调用*/ $man = SimpleFactoty::createMan(); $man->say(); $woman = SimpleFactoty::createWomen(); $woman->say(); ?>
转载于:https://www.cnblogs.com/wanglijun/p/10924650.html
设计模式一(抽象工厂模式)相关推荐
- 设计模式系列·抽象工厂模式
前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...
- 设计模式三—抽象工厂模式
设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...
- 设计模式复习-抽象工厂模式
设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...
- 设计模式之四(抽象工厂模式第三回合)
原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...
- python抽象工厂模式_Python设计模式之抽象工厂模式
Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...
- 设计模式-04抽象工厂模式
设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...
- C#设计模式(4)——抽象工厂模式
C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...
- 设计模式之抽象工厂模式(Abstract Factory)摘录
面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...
- java 工厂模式的写法_Java23种设计模式之抽象工厂模式
概述 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...
最新文章
- 法总统:英国若“无协议脱欧” 将成最大输家
- 阿里为什么建议给MVC三层架构多加一层Manager层?
- 笔试:当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? ?(2nd)...
- 拥塞控制中的开环和闭环控制
- Linux(CentOS 7)安装docker
- TCP/IP研究(2)-TCB
- 学生电脑哪个牌子好_香米哪个牌子好
- 波形分析--SPI数据
- 亚马逊-不一样的电商公司
- ai人工智能使用的软件_MachineRay:使用AI创造抽象艺术
- Linux下小巧的取色精灵gcolor2
- 计算机网络特有的设备是什么,什么是网络设备(计算机入门知识,这些网络设备及工具你有必要知道)...
- KEPServerEX 6.7.1046.0 新版本功能大全
- win7如何设置通电自动开机_win7系统如何自动开机|win7自动开机的方法
- ssh远程登录命令简单实例
- dplyr-高效的数据变换与整理工具--转载
- git pull 报错:error: Pulling is not possible because you have unmerged files.
- 轮播图进度条同步切换(参考漫威官网)
- 【毕业设计】基于单片机的墨水屏阅读器(单词卡) - 物联网 嵌入式
- 快速图像旋转算法的c++实现
热门文章
- 【渝粤教育】国家开放大学2018年春季 0266-22T设计构成 参考试题
- 【渝粤教育】广东开放大学 微信平台开发与应用 形成性考核 (54)
- 关于柯西许瓦兹不等式的一些思考
- 实例篇——springboot自定义拦截器
- Jmeter(十九) 后置处理器JSON Extractor 提取json的多个值
- 涉及到大小变化,类似QScrollArea判断大小是否显示滚动条
- 谷歌中文为什么以红色高亮关键字
- 【转载】StreamInsight系列-QueryTemplate\QueryBinder\Query
- Akka源码分析-Remote-收消息
- python 除法总返回浮点