视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php工厂模式和单例模式区别
2020-11-27 14:43:02 责编:小采
文档

php工厂模式和单例模式区别

单例模式:防止重复实例化,避免大量的new操作,减少消耗系统和内存的资源,使得有且仅有一个实例对象

header("Content-type: text/html; charset=utf-8"); //定义字符编码,防止乱码
/**
 * 单利类
 */
class Single
{
 private static $_instance; //保存实例的对象
 
 
 private function __construct() //定义构造方法
 {
 
 }
 
 private function __clone() //定义一个空方法防止被外部克隆
 { 
 
 }
 
 
 public static function getInstance() //定义一个获取实例对象的方法
 {
 if (!(self::$_instance instanceof Single)) {
 self::$_instance = new self();
 }
 return self::$_instance; //返回实例对象
 }
 
 /**
 * 测试方法
 */
 public function test()
 {
 echo "单利模式";
 }
 
}
 
 
$run=Single::getInstance();
$run->test();

工厂模式:用工厂方法代替new操作的一种模式,如果需要更改所实例化的类名,只需在工厂方法内修改,不需逐一寻找代码中具体实例化的地方

header("content-type:text/html;charset=utf-8"); //定义字符编码,防止乱码
/**
 * 测试类一
 */
class demo1
{
 //定义一个test1方法
 public function test1()
 {
 echo '这是demo1类的test1方法'.PHP_EOL;
 }
}
/**
 * 测试类二
 */
class demo2
{
 //定义一个test2方法
 public function test2()
 {
 echo '这是demo2类的test2方法'.PHP_EOL;
 }
}
/**
 * 工厂类
 */
class Factoty
{
 // 根据传参类名,创建对应的对象
 static function createObject($className)
 {
 return new $className();
 }
}
/**
 * 通过传类名,调用工厂类里面的创建对象方法
 */
$demo = Factoty::createObject('demo1');
$demo->test1(); //
输出这是demo1类的test1方法 $demo = Factoty::createObject('demo2'); $demo->test2(); //输出这是demo2类的test2方法

更多PHP知识,请访问PHP中文网!

下载本文
显示全文
专题