
一、工厂模式
属于类创建型模式,在简单工厂模式中,可以根据参数的不同返回不同类的实例,简单工厂模式专门定义一个类来负责创建其他类的实例,
被创建的实例通常都具有共同的父类。
代码实例:
class Cat{
function __construct(){
echo "I am Cat class ";
}
}
class Dog{
function __construct(){
echo "I am Dog class ";
}
}
class Factory{
public static function CreateObject($name){
if ($name == 'cat') {
return new Cat();
}elseif ($name == 'dog') {
return new Dog();
}
}
}
$cat = Factory::CreateObjectl('cat');
$dog = Factory::CreateObject('dog');优点:实现对象的创建和对象使用的分离,将对象的创建交给专门的工厂类负责;一旦发生变更,只需要在工厂类里面修改即可,而不用一个一个的去修改。
缺点:工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,产品较多时。工厂方法代码非常复杂。
二、单例模式
是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,
这样有利于我们协调系统整体的行为。防止对象多次连接,造成资源浪费。
示例代码:
class DataBase{
private static $instance;
private function __construct(){}//私有构造方法 禁止使用new创建对象
public static function getInstance(){
if (!isset(self::$instance)) {
self::$instance = new self;
}
return self::$instance;
}
private function __clone(){}//将克隆方法设为私有,禁止克隆对象
public function say(){
echo "这是用单例模式创建对象实例 ";
}
public function operation(){
echo "这里可以添加其他方法和操作 ";
}
}
$db = DataBase::getInstance();
$db->say();
$db->operation();三、注册器模式
已经创建好对象后,下次使用直接取,将一些对象注册到全局树上面,可以用来在任何地方被访问。一般只提供一个set 和 unset 两种方法,
需要一个静态的非公开属性和一个取得静态属性的静态方法.
实例代码:
class Register {//注册器模式
protected static $object;
public static function set($alias, $object){
self::$object[$alias] = $object;
}
public static function get($alias){
return self::$object[$alias];
}
public static function _unset($alias){
unset(self::$object[$alias]);
}
}
class Factory{//工厂模式
public static function createObject(){
$db = DataBase::getInstance();
Register::set('db', $db);
}
}
class DataBase{//单例模式
protected static $instance;
public static function getInstance(){
if (!isset(self::$instance)) {
self::$instance = new self;
}
return self::$instance;
}
public function say(){
echo "这是用单例模式创建对象实例 ";
}
}
$db = Factory::createObject();
$obj = Register::get('db');
$obj->say();评论
暂无评论
评论(0)