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. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  2. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  4. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  5. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  6. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  7. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  8. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

  9. 设计模式之抽象工厂模式(Abstract Factory)摘录

    面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...

  10. java 工厂模式的写法_Java23种设计模式之抽象工厂模式

    概述 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

最新文章

  1. 法总统:英国若“无协议脱欧” 将成最大输家
  2. 阿里为什么建议给MVC三层架构多加一层Manager层?
  3. 笔试:当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? ?(2nd)...
  4. 拥塞控制中的开环和闭环控制
  5. Linux(CentOS 7)安装docker
  6. TCP/IP研究(2)-TCB
  7. 学生电脑哪个牌子好_香米哪个牌子好
  8. 波形分析--SPI数据
  9. 亚马逊-不一样的电商公司
  10. ai人工智能使用的软件_MachineRay:使用AI创造抽象艺术
  11. Linux下小巧的取色精灵gcolor2
  12. 计算机网络特有的设备是什么,什么是网络设备(计算机入门知识,这些网络设备及工具你有必要知道)...
  13. KEPServerEX 6.7.1046.0 新版本功能大全
  14. win7如何设置通电自动开机_win7系统如何自动开机|win7自动开机的方法
  15. ssh远程登录命令简单实例
  16. dplyr-高效的数据变换与整理工具--转载
  17. git pull 报错:error: Pulling is not possible because you have unmerged files.
  18. 轮播图进度条同步切换(参考漫威官网)
  19. 【毕业设计】基于单片机的墨水屏阅读器(单词卡) - 物联网 嵌入式
  20. 快速图像旋转算法的c++实现

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 0266-22T设计构成 参考试题
  2. 【渝粤教育】广东开放大学 微信平台开发与应用 形成性考核 (54)
  3. 关于柯西许瓦兹不等式的一些思考
  4. 实例篇——springboot自定义拦截器
  5. Jmeter(十九) 后置处理器JSON Extractor 提取json的多个值
  6. 涉及到大小变化,类似QScrollArea判断大小是否显示滚动条
  7. 谷歌中文为什么以红色高亮关键字
  8. 【转载】StreamInsight系列-QueryTemplate\QueryBinder\Query
  9. Akka源码分析-Remote-收消息
  10. python 除法总返回浮点