抽象工厂模式
来源:互联网 发布:安卓锁屏可以录像软件 编辑:程序博客网 时间:2024/06/06 04:57
描述
提供一个创建一系列相关或相互依赖的对象的接口,而不需要指定具体的类
使用场景
- 一个系统要独立于他的产品的创建、组合和表示时
- 一个系统要由多个产品系列中的一个配置时
- 需要强调一系列相关产品的对象设计 以便进行联合使用时
结构
实现
- 基于工厂方法模式实现,定义创建一系列产品工厂方法,在工厂子类中实现该方法
- 基于原型模式实现,避免新产品系列添加时,创建工厂子类
代码示例
class Window {}class PMWindow extends Window {}class MotlfWindow extends Window {}class extensionWindow extends Window {}class ScrollBar {}class PMScrollBar extends ScrollBar {}class MotlfScrollBar extends ScrollBar {}class extensionScrollBar extends ScrollBar {}class Widget { public function createWidget() { $this->window = $this->createWindow(); $this->scrollBar = $this->createScrollBar(); } public function createWindow() { } public function createScrollBar() { }}class PMWidget extends Widget { public function createWindow() { return new PMWindow(); } public function createScrollBar() { return new PMScrollBar(); }}class MotlfWidget extends Widget { public function createWindow() { return new MotlfWindow(); } public function createScrollBar() { return new MotlfScrollBar(); }}//可扩展的工厂class extensionWidget extends Widget { public function createWidget($window, $scrollBar) { $this->window = $this->getPartObj($window); $this->scrollBar = $this->getPartObj($scrollBar); } public function getPartObj($className = '') { try { //在这里可以保存好创建好的对象,第二次调用时可以复制,也就是基于原型模型的实现方式 $class = new ReflectionClass($className); $instance = $class->newInstanceArgs(); return $instance; } catch(Exception $e) { var_dump($e->getMessage()); } }}$widget = new PMWidget();$widget->createWidget();var_dump($widget);$widget = new MotlfWidget();$widget->createWidget();var_dump($widget);//扩展后的抽象工厂$widget = new extensionWidget();$widget->createWidget('extensionWindow','extensionScrollBar');var_dump($widget);
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 深入理解计算机系统-笔记1
- JAVA图形界面(GUI)之表格
- 实现对象的复用——享元模式
- shell编程基础
- 员工的忠诚来自哪里 ?
- 抽象工厂模式
- iOS中的文件管理
- OK6410用DNW下载led和ds18b20的裸机程序
- Tomcat 局部数据源配置
- 别人对CSAPP的阅读理解
- 2016元旦上课 ocp
- 【bzoj4278】 [ONTAK2015]Tasowanie 后缀数组
- 备忘录模式
- 网卡重启后,如何恢复MHA的虚IP