【PHP设计模式 04_GongChang.php】 工厂方法
<?php
/**
* 【工厂方法】
* 之前 03.php 简单工厂,如果再增加一个oracle客户端,就需要再次修改服务端Factory的代码。
* 在面向对象设计法则中,有一个重要的【开闭原则】———— 对于修改是封闭,对于扩展是开放的
*
*/
header("Content-type: text/html; charset=utf-8");
/*共同接口--连接数据库*/
interface db{
function conn();
}
//工厂接口--创建数据库
interface Factory{
function createDB();
}
/*服务端开发,面向上面的接口。(不知道将会被谁调用)*/
class dbmysql implements db{
public function conn(){
echo '04-连接上了mysql <br>';
}
}
class dbsqlite implements db{
public function conn(){
echo '04-连接上了sqlite <br>';
}
}
//定义多个工厂类,分别实现上面的工厂接口
class mysqlFactory implements Factory{
public function createDB(){
$db = new dbmysql();
return $db->conn();
}
}
class sqliteFactory implements Factory{
public function createDB(){
$db = new dbsqlite();
return $db->conn();
}
}
/* 客户端开发 */
$fact = new mysqlFactory();
$fact->createDB();
$fact = new sqliteFactory();
$fact->createDB();
////==== 假如现在新增 oracle的相关数据(前面的代码不用改):
class dboracle implements db{
public function conn(){
echo '04-连接上了oracle';
}
}
class oracleFactory implements Factory{
public function createDB(){
$db = new dboracle();
return $db->conn();
}
}
//客户端调用
$fact = new oracleFactory();
$fact->createDB(); //输出“04-连接上了oracle”
【PHP设计模式 04_GongChang.php】 工厂方法的更多相关文章
- 大话设计模式C++版——工厂方法模式
工厂方法模式是以简单工厂模式为基础的,如果未了解简单工厂模式的同学可先浏览<大话设计模式C++版——简单工厂模式>.在简单工厂模式中,提到过简单工厂模式的缺陷,即违背了开发—封闭原则,其主 ...
- IOS设计模式浅析之工厂方法模式(Factory Method)
概述 在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口. 如何隔离出这个易变对象的变化,使得系统中“其它依赖该对象的对 ...
- [设计模式]<<设计模式之禅>>工厂方法模式
1 女娲造人的故事 东汉<风俗通>记录了一则神话故事:“开天辟地,未有人民,女娲搏黄土做人”,讲述的内容就是大家非常熟悉的女娲造人的故事.开天辟地之初,大地上并没有生物,只有苍茫大地,纯粹 ...
- PHP设计模式一:工厂方法设计模式
一.什么是工厂方法模式 作为一种创建型设计模式,工厂方法模式就是要创建“某种东西”.对于工厂方法,要创建的“东西”是一个产品,这个产品与创建它的类之间不存在绑定. 实际上,为了保持这种松耦合,客户会通 ...
- java设计模式-----2、工厂方法模式
再看工厂方法模式之前先看看简单工厂模式 工厂方法模式(FACTORY METHOD)同样属于一种常用的对象创建型设计模式,又称为多态工厂模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的 ...
- C#设计模式之二工厂方法模式(Factory Method Pattern)【创建型】
一.引言 在上一篇文章中我们讲解了过渡的一种模式叫做[简单工厂],也有叫[静态工厂]的,通过对简单工厂模式得了解,我们也发现了它的缺点,就是随着需求的变化我们要不停地修改工厂里面的方法的代码,需求变化 ...
- 设计模式C++实现——工厂方法模式
模式定义: 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个. 工厂方法让类把实例化推迟到子类. 模式结构: Creator是一个类,它实现了全部操纵产品的方法,但不实现工厂方法 ...
- 大话设计模式Python实现-工厂方法模式
工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类. #!/usr/bin/env python ...
- 【C#设计模式3】工厂方法模式
一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是——简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...
- 重学 Java 设计模式:实战工厂方法模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
随机推荐
- vs2015 使用 visual studio on line 在线版本控制
将visual studio on line 作为一个免费在线版本控制器还是不错的,可以支持5个免费用户共同开发, 以下作为记录,贴在此. 一 申请visual studio on line 账户. ...
- windows 64位 dll文件 位置及python包rtree shapely安装
位置 \Windows\System32 python包依赖包安装 rtree 依赖 spatialindex(spatialindex.dll spatialindex_c.dll) shape ...
- mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
官方git https://github.com/Qihoo360/Atlas 参照:http://blog.qixingzhong.com/2013/09/centos-install-atlas. ...
- set ver on/off
set verify(或ver) on/off可以设置是否显示替代变量被替代前后的语句 SQL> set verify on SQL> select &num from d ...
- First learning operation system
1,操作系统负责管理硬件资源,为应用程序的开发执行提供基础 2,用户空间包括应用程序,只能通过调用系统调用访问硬件,无法访问更小粒度功能 3,设备驱动程序函数和内核子系统的函数对用户不可见 4,操作系 ...
- typedef NS_OPTIONS 位移的枚举
typedef NS_OPTIONS里面的枚举可以并存使用 用 | 来并存
- PostgreSQL wiki
https://wiki.postgresql.org/wiki/Main_Page https://wiki.postgresql.org/wiki/Converting_from_other_Da ...
- eclipse 改变字体大小
- [转]Apache Maven 入门篇 ( 上 )
原文地址:Apache Maven 入门篇 ( 上 ) 作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这 ...
- override 与 overdown 的区别
重写与重载的区别 1. 重载是方法的名称相同.参数或参数类型不同,进行多次重载以适应不同的需要 2. 重写是进行基类中函数的重写.为了适应需要.