php中设计模式工厂模式和单例模式实例
发布:smiling 来源: PHP粉丝网 添加日期:2014-01-16 11:05:57 浏览: 评论:0
1.工厂模式
工厂模式是一种类,它具有为您创建对象的某些方法,您可以使用工厂类创建对象,而不直接使用 new,这样,如果您想要更改所创建的对象类型,只需更改该工厂即可,使用该工厂的所有代码会自动更改。
主要作用是降低耦合度,代码如下:
- abstract class Operation{
- abstract public function getValue($num1,$num2);
- public function getAttr(){
- return 1;
- }
- }
- class Add extends Operation{
- public function getValue($num1, $num2){
- return $num1+$num2;
- }
- }
- class Sub extends Operation{
- public function getValue($num1, $num2){
- return $num1-$num2;
- }
- }
- class Factory{
- public static function CreateObj($operation){
- switch ($operation){
- case '+': return new Add();
- case '-': return new Sub();
- }
- }
- }
- $Op=Factory::CreateObj('-');
- echo $Op->getValue(3, 6);
用在真正开发中一般当做数据库选择类。
实例2 显示使用工厂方法的一个示例,代码如下:
- <?php
- interface IUser
- {
- function getName();
- }
- class User implements IUser
- {
- public static function Load( $id )
- {
- return new User( $id );
- }
- public static function Create( )
- {
- return new User( null );
- }
- public function __construct( $id ) { }
- public function getName()
- {
- return "Jack";
- }
- }
- $uo = User::Load( 1 );
- echo( $uo->getName()."n" );
- ?>
这段代码要简单得多,它仅有一个接口 IUser 和一个实现此接口的 User 类,User 类有两个创建对象的静态方法.PHP里通过工厂模式提高效率
我们建立以下四个文件,代码如下:
- //index.php
- <?php
- include_once("f.inc.php");
- $f=new factory;
- $t1=&$f->create('T1');
- echo $t1->getName();
- echo $config;
- ?>
- //f.inc.php
- <?php
- class factory
- {
- function factory()
- {
- $this->mClasses=array('T1'=>'t1.inc.php','T2'=>'t2.inc.php');
- }
- function &create($class)
- {
- if (!class_exists($class))
- {
- require_once($this->mClasses[$class]);
- }
- return new $class;
- }
- }
- ?>
- //t1.inc.php
- <?php
- global $config;
- $config='surfchen';
- class T1
- {
- var $mName='name::T1';
- function getName()
- {
- return $this->mName;
- }
- }
- ?>
- //t2.inc.php
- <?php
- class T2
- {
- function T2()
- {
- echo 't2 is ok';
- }
- }
- ?>
在index.php里,我们通过一个factory类来创建其他的类实例。
在factory里,保存有一个数组$this->mClasses,格式为array(“类名”=>”类文件路径”).
我们通过factory::create()来创建一个类实例的时候,在create()里,会首先检测类是否存在,如果不存在,就根据$this->mClasses把类对应的类文件包含进来。然后创建并返回一个该类的实例。
这样,我们只需要把factory类文件包含进执行的脚本(如index.php)中就可以了,大家可能还注意到了在t1.inc.php中的这两行代码,代码如下:global $config;$config='surfchen';
2.单例模式
简单来说,PHP单例模式就是一个功能用一个类来实现,并且在整个应用程序当中只有一个这个类的实例存在;
工厂模式强调的是面向对象的多态性,它可以把功能上的差异部分封装起来,对外实现共有的功能,比如说数据库的链接,由于数据库的不同,我们可能需要写不同的方法去实现数据库的链接,但作为应用程序来讲,它不需要了解数据库用的是MySQL还是Oracle,它只需要用query()这个方法去执行数据库的相应操作即可,这样就屏蔽了差异,使类更加健壮!代码如下:
- class Mysql{
- public static $conn;
- public static function getInstance(){
- if (!self::$conn){
- new self();
- return self::$conn;
- }else {
- return self::$conn;
- }
- }
- private function __construct(){
- self::$conn= "mysql_connect:";// mysql_connect('','','')
- }
- public function __clone()
- {
- trigger_error("Only one connection");
- }
- }
- echo Mysql::getInstance();
- echo Mysql::getInstance();
实际中用作数据库连接类和工厂模式一起使用,根据参数调用单例模式,可以提高资源使用效率.
Tags: 设计 模式 工厂 单例模式 实例
相关文章
- ·php设计模式——单例模式(Singleton)的常见应用场景(2015-04-15)
- ·php 设计模式之单例模式例子(2016-07-27)
- ·PHP设计模式装饰器模式实例(2016-07-27)
- ·PHP设计模式之:原型模式学习笔记(2016-07-27)
- ·PHP设计模式之:单例模式的学习笔记(2016-07-29)
- ·PHP设计模式之:注册模式入门教程(2016-07-29)
- ·PHP设计模式之:适配器模式入门教程(2016-07-29)
- ·PHP设计模式之:数据映射模式教程(2016-07-29)
- ·PHP设计模式之:观察者模式学习笔记(2016-07-29)
- ·PHP设计模式之装饰器模式定义与用法简单示例(2018-10-19)
- ·PHP常用设计模式之委托设计模式(2021-07-09)
- ·php设计模式之委托模式(2021-07-09)
- ·PHP设计模式之观察者模式实例(2021-07-10)
- ·PHP设计模式之模板方法模式定义与用法详解(2021-09-06)
- ·PHP设计模式之状态模式定义与用法详解(2021-09-06)
- ·PHP设计模式之装饰器模式定义与用法详解(2021-09-06)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)