「PHP」抽象工厂模式
- 《大话设计模式》程杰
<?php
/**
* 用户产品类具体操作接口
*/
namespace abstract_factory; interface UserInterface
{
/**
* 查询操作接口
* @return mixed
*/
public function select(); /**
* 插入操作接口
* @return mixed
*/
public function insert();
}
<?php
/**
* 订单产品类具体操作接口
*/
namespace abstract_factory; interface OrderInterface
{
/**
* 查询操作接口
* @return mixed
*/
public function select(); /**
* 插入操作接口
* @return mixed
*/
public function insert();
}
<?php
/**
* MySQL 订单产品类具体操作
*/
namespace abstract_factory; class MysqlOrder
{
/**
* 查询具体操作
*/
public function select()
{
echo '订单表查询';
} /**
* 插入具体操作
*/
public function insert()
{
echo '订单表插入';
}
}
<?php
/**
* MySQL 用户产品类具体操作
*/
namespace abstract_factory; class MysqlUser
{
/**
* 查询操作
*/
public function select()
{
echo '订单表查询';
} /**
* 插入操作
*/
public function insert()
{
echo '订单表插入';
}
}
<?php
/**
* Oracle 订单产品类具体操作
*/
namespace abstract_factory; class OracleOrder
{
/**
* 查询具体操作
*/
public function select()
{
echo '订单表查询';
} /**
* 插入具体操作
*/
public function insert()
{
echo '订单表插入';
}
}
<?php
/**e
* Oracle 用户产品类具体操作
*/
namespace abstract_factory; class OracleUser
{
/**
* 查询操作
*/
public function select()
{
echo '用户表查询';
} /**
* 插入操作
*/
public function insert()
{
echo '用户表插入';
}
}
<?php
/**
* 定义需要实例产品类的工厂类接口数量
*/
namespace abstract_factory; interface DBFactoryInterface
{
/**
* 用户工厂类接口
* @return mixed
*/
public function createUser(); /**
* 订单工厂类接口
* @return mixed
*/
public function createOrder();
}
<?php
/**
* MySQL操作 包装产品类升级为工厂类
*/
namespace abstract_factory; class MysqlFactory implements DBFactoryInterface
{
/**
* 用户产品类
* @return MysqlUser
*/
public function createUser()
{
return new MysqlUser();
} /**
* 用户产品类
* @return MysqlOrder
*/
public function createOrder()
{
return new MysqlOrder();
} }
<?php
/**
* Oracle操作 包装产品类升级为工厂类
*/
namespace abstract_factory; class OracleFactory implements DBFactoryInterface
{
/**
* 用户产品类
* @return OracleUser
*/
public function createUser()
{
return new OracleUser();
} /**
* 订单产品类
* @return OracleOrder
*/
public function createOrder()
{
return new OracleOrder();
} }
GitHub源码地址:https://github.com/xiaobaoword/design_pattern/tree/master
「PHP」抽象工厂模式的更多相关文章
- 「PHP」简单工厂模式
引言 所属:创建型模式,常用设计模式之一 工厂模式分为:简单工厂模式.工厂方法模式.静态工厂模式.抽象工厂模式. 下面为简单工厂模式. 参考资料: <大话设计模式>程杰 模式概 ...
- PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)
一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...
- 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)
今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...
- Objective-C 工厂模式(下) -- 抽象工厂模式
相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的 抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产 比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买 ...
- Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)
一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...
- .NET设计模式(2):1.2 抽象工厂模式(Abstract Factory)
概述 抽象工厂模式(Abstract Factory)是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口 ...
- 设计模式(四)抽象工厂模式(Abstract Factory Pattern)
一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码,而工厂方法模式每个具体工厂类只完成单个实例的创建 ...
- php实现设计模式之 抽象工厂模式
<?php /*抽象工厂模式:提供一个创建一系统相关或相互依赖对象的接口,而无需指定它们具体的类 * 创建型模式 */ //抽象小米工厂,能制造小米一,小米二 abstract class mi ...
- 设计模式(3)--抽象工厂模式(Absrtact Factory Pattern)
定义 抽象工厂模式的实质就是提供接口来创建一系列相关或独立的对象而不指定这些对象的具体类. 理解 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往 ...
随机推荐
- PHP discuz模板语法
Discuz! X 模板的解析主要是 ./source/class/class_template.php 文件解析处理的,如果需要深入了解请可以看看这个文件! 模板嵌套语法 将被嵌套模板内容解析为 P ...
- 天诛进阶之D算法 #3700
http://mp.weixin.qq.com/s/ngn98BxAOLxXPlLU8sWH_g 天诛进阶之D算法 #3700 2015-11-24 yevon_ou 水库论坛 天诛进阶之D算法 #3 ...
- MySQL案例02:ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
MySQL在授权用户时出现报错信息,具体信息如下: 一.错误信息 执行命令: GRANT SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SH ...
- using log4net on my project within a self-hosted WCF application z
Add reference to log4net.dll to our console service host project (our application entry point) Add t ...
- Python学习---socketServer编程
学会去看源码 服务器端: import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): ...
- Can't create new folder in windows7
First, please use System File Checker tool to troubleshoot(诊断) this issue. If the issue persists, im ...
- EJB 3.1 @Startup @Singleton sequence
The annotation javax.ejb.Startup (@Startup) is used to mark an EJB so to make the EJB can be brought ...
- February 14 2017 Week 7 Tuesday
Love lives in cottages as well as in courts. 爱情无贵贱,贫富皆有之. Many people, especially boys, complain tha ...
- Cache及(HttpRuntime.Cache与HttpContext.Current.Cache)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/avon520/archive/2009/11/25/4872704.aspx .NET中Cache有两种调用方式:Ht ...
- [零基础学JAVA]Java SE面向对象部分.面向对象基础(01)
在对象的内存分配上与c++有区别: C++:#include <iostream>#include <string> class Person{ private: ...