php设计模式课程---3、为什么会有抽象工厂方法

一、总结

一句话总结:

解决简单工厂方法增加新选择时无法满足面向对象编程中的开闭原则问题

1、什么是面向对象编程中的开闭原则?

应该对类的增加开放,对类的修改闭合:也就是你有什么事,就通过新增类实现,而不要修改原来的类

2、抽象工厂方法如何实现?

类实现接口的方法,每个类负责一种产品,比如读取数据库时,比如是PDO数据库,那么读取配置文件的pdo然后调用pdo类来生成对象即可

3、抽象工厂方法和简单工厂方法实现解决不同种情况的区别是什么?

简单工厂方法:if判断
抽象工厂方法:不同类实现接口,每个类只负责一个产品

二、为什么会有抽象工厂方法

1、相关知识

 

2、代码

 <?php
/**
**/ // 抽象工厂 // 开闭原则, 应该对类的增加开放,对类的修改闭合. class MySQL { } class Sqlite { } class MyPDO { } /*
class Factory {
public static function getDB($type) {
if($type == 'MySQL') {
return new MySQL();
} else if($type == 'Sqlite') {
return new Sqlite();
} else if($type == 'MyPDO') {
return new MyPDO();
} else {
throw new Exception("sorry", 1); }
}
} // 获取DB对象的时
print_r( Factory::getDB('MySQL') );
*/ interface Factory {
public static function getDB();
} class MySQLFactory implements Factory {
public static function getDB() {
return new MySQL();
}
} class SqliteFactory implements Factory {
public static function getDB() {
return new Sqlite();
}
} class MyPDOFactory implements Factory {
public static function getDB() {
return new MyPDO();
}
} // 配置文件
$fact = 'MyPDOFactory';
$db = MyPDOFactory::getDB();
print_r($db); ?>
 

php设计模式课程---3、为什么会有抽象工厂方法的更多相关文章

  1. Java设计模式从精通到入门五 抽象工厂方法模式

    定义 抽象工厂类为创建一组相关和相互依赖的对象提供一组接口,而无需指定一个具体的类. ​ 这里我得把工厂方法模式得定义拿出来做一下比较:定义一个创建对象的接口,由子类决定实例化哪一个类.工厂方法是一个 ...

  2. iOS设计模式解析(二)抽象工厂方法

    抽象工厂方法:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 与工厂方法区别: 抽象工厂通过对象组合创建抽象产品.工厂通过类集成创建抽象产品 抽象工厂创建多系列产品.工厂创建一种产 ...

  3. Android设计模式——抽象工厂方法模式

    1.抽象工厂方法模式:为了创建一组或相互依赖的对象提供一个接口,而不需要指定它们是具体类……无语 2.找个代码看看: 抽象工厂类<成员为接口> /** * 抽象工厂 * */ public ...

  4. 大话设计模式C++实现-第15章-抽象工厂模式

    一.UML图 二.概念 抽象方法模式(Abstract Factory):提供一个创建一系列相关或互相依赖对象的接口,而无需指定他们详细的类. 三.包括的角色 (1)抽象工厂 (2)详细工厂:包含详细 ...

  5. 设计模式成长记(一) 抽象工厂模式(Abstract Factory)

    目录 定义 UML类图 参与者 编写代码 特点 定义 提供一个创建一系列相关或相互依赖的对象的接口,而无需指定具体的类. 使用频率: UML类图 参与者 AbstractFactory:声明一个创建抽 ...

  6. java23种设计模式之九: 抽象工厂方法模式

    一.抽象工厂定义 上一讲我们说了一下工厂方法,那么我们如何对工厂进行抽象. 因为工厂是生产产品的,现在我们需要工厂抽象,只生产抽象产品,不生产具体的产品,这同时也体现了java的多态. 现在有2个抽象 ...

  7. OC编程之道-创建对象之抽象工厂方法

    定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类.       <AbstractProductA> <AbstractProductB> <Ab ...

  8. 设计模式之美:Factory Method(工厂方法)

    索引 别名 意图 结构 参与者 适用性 缺点 效果 相关模式 命名约定 实现 实现方式(一):Creator 类是一个抽象类并且不提供它所声明的工厂方法的实现. 实现方式(二):Creator 类是一 ...

  9. 我学的是设计模式的视频教程——辛格尔顿,生成器VS工厂方法

    课程视频 单例模式         建造者VS工厂方法                      课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博客原创文章,博客, ...

随机推荐

  1. Android SDK环境搭建

    方法有二 方法一: Android SDK开发包国内下载地址 http://www.cnblogs.com/bjzhanghao/archive/2012/11/14/android-platform ...

  2. json字符串传值到后台出现乱码的问题的解决方法

    1.原因:前台的编码是ISO-8859-1,后台的编码是UTF-8,所以会冲突 2.解决方法:先用ISO-8859-1解码成字节数组,再转成UTF-8编码格式 String strw = new St ...

  3. [WebGL入门]二十五,点光源的光照

    注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中假设有我的额外说明.我会加上[lufy:].另外,鄙人webgl研究还不够深入,一些专业词语.假设翻译有误,欢迎大家指 ...

  4. telnet命令的使用

    telnet是啥? Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力.在终端使用者的电脑上使用tel ...

  5. 线段树专题—HDU1698 Just a Hook

    题意:t组数据,给一个n.m表示n长度的钩和m次操作.初始钩子的每单位长度的价值为1,接下来输入 x,y,k 的操作把钩子[x,y]区间的价值替换为k,求m次操作后钩子的价值为多少 分析:成段替换.最 ...

  6. Linux与本地上传下载文件

    当出于安全原因,客户的服务器不允许使用windows第三方插件连接的时候,本地windows跟远程的linux服务器进行文件的上下传受到了限制,此时可以在linux服务器上安装一个工具:lrzsz.安 ...

  7. iOS - 每隔一段时间,反复执行同一个任务

    我们有时候会有这样的需求,当程序处于运行状态,每隔几秒给服务器发送一次请求. 这时我们可以这样处理: UILocalNotification *localNotification = [[UILoca ...

  8. C语言中的编译时分配内存

    1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等: 2.堆区(heap) --由程序员分配释放: 3.全局区或静态区 --存放全局变量和静态变量:程序结束时由系统释放 ...

  9. 经过两个多月的攻关,终于搞定了live555多线程并稳定压测通过

    live555已经发展了十几年了,不得不钦佩作者坚持不懈的奉献和国外的开源生态环境,live555可以说是大部分的安防从业者的入门之选,尤其是在嵌入式或者Linux系统上,其应用还是蛮广泛的,主要是其 ...

  10. js的new到底干了啥 -

    javascript通过new操作符构建一个对象的步骤 <Javascript高级程序设计>的解释: 创建一个对象 将构造函数的作用域赋给新对象(把新对象作为构造函数的调用上下文,也就是t ...