zoukankan      html  css  js  c++  java
  • 简单工厂模式

    简单工厂模式:提供获取某个类的新实例的一个接口,同时使调用代码避免确定实际实例化基类的步骤

    请看下面代码

    <?php 
    	class mysql_DB{	}
    	class sqlite_DB{ }
    	class pdo_DB{ }
    
    	class Factory{
    		public static function getDB($type){
    			if(strtolower($type)=='mysql'){
    				return new mysql_DB();
    			} else if(strtolower("sqlite")=="sqlite") {
    				return new sqlite_DB();
    			} else {
    				return new pdo_DB();
    			}
    			
    			//或者用下面的代码实现:
    			// $type=strtolower($type)."_DB";
    			// return new $type();
    		}
    	}
    
    	$a=Factory::getDB("sqlite");
    	var_dump($a);//object(sqlite_DB)#1 (0) { } 
    
    	$b=Factory::getDB("mysql");
    	var_dump($b);//object(mysql_DB)#2 (0) { }
     ?>

    如果不将Factory中的代码封装一下的话,那么在每次要实例化对象时,都得有那么多行的if..else if ...或者switch/case来判断到底要实例化哪个对象;

    如果有一百个页面都要实例化这类对象,如果不封装,那这么多的判断条件就得写100次,一方面,这么多代码写着也挺浪费时间的(有时候if/else if或者switch/case多达几十个),就算你复制粘贴一百次也是一样;另一方面,一旦要修改这些判断中的某条语句,那么100个页面就得挨个修改,哪怕之后只增加一个两三行的判断。

    所以可以这些判断进行封装,封装在一个工厂类的静态方法中,这个通过调用这个工厂中的静态方法(也就是工厂类提供给外界一个接口),然后获得一个新实例的对象,不用每次都写一次判断,减少了很多步骤,这就减少了很多错误的发生,还便于修改。在其他页面中,直接用include包含这个文件即可。

    简单工厂有一定的局限,可以看另一篇博文:工厂模式

  • 相关阅读:
    【2019/7/15】暑假自学——周进度报告
    用户体验评价
    《程序员修炼之道》读后感03
    《程序员修炼之道》读后感02
    《程序员修炼之道》读后感01
    《梦断代码》读后感03——为什么我们不能像造桥一样造软件
    《梦断代码》读后感02——问题的开始
    《梦断代码》读后感01——Chandle的开始
    第二阶段冲刺9
    十五周总结
  • 原文地址:https://www.cnblogs.com/-beyond/p/7745643.html
Copyright © 2011-2022 走看看