PHP设计模式

1.单例模式
    a.含义: 通过提供自身共享实例的访问,单例设计模式用于限制特定对象只能被创建一次。
    b.使用场景
            1.例如数据库实例,一般都会走单例模式。
            2.单例模式可以减少类的实例化
    c.代码示例
<?php
class DB{
     public static $instance =null;
     public static function instance(){
          $class = get_called_class();
          if(empty(self::$instance[$class])){
              self:$instance[$class] = new $class();
          }
           return self:$instance[$class];
     }
}
2.观察者模式
    a.含义:观察者设计模式能够更便利创建和查看目标对象状态的对象,并且提供和核心对象非耦合的置顶功能性。观察者设计模式非常常用,在一般复杂的WEB系统中,
        观察者模式可以帮你减轻代码设计的压力,降低代码耦合。
    b.使用场景:
        1.设计一个订单类
        2.订单创建完成后,会做各种动作,比如发送EMAIL,或者改变订单状态等等。
        3.原始的方法,是将这些操作都写在create函数里面
        4.但是随着订单创建类的越来越庞大,这样的操作已经无法满足需求和快速变动
        5.这个时候,观察者模式出现了。
    c.代码示例:
   
<?php
header("Content-type:text/html;charset=UTF-8");
class order{

	protected $observers = array();
	//增加观察者
	public function addObserver($type,$observer){
		$this->observers[$type][] = $observer;
	}
	//运行观察者
	public function obServer($type){
		if(isset($this->observers[$type])){
			foreach ($this->observers[$type] as $key => $obser) {
				$a = new $obser;
				$a->update($this);
			}
		}
	}
	//下单购买流程
	public function create(){
		echo '购买成功<br>';
		$this->obServer('buy');
	}
}

class orderEmail{
	public function update($order){
		echo "发送购买成功的一个邮件<br>";
	}
}
class orderStatus{
	public function update($order){
		echo "改变订单状态<br>";
	}
}

$ob= new order();
$ob->addObserver('buy','orderEmail');
$ob->addObserver('buy','orderStatus');
$ob->create();

3.工厂模式
    a.提供获取某个对象实例的一个接口,同时使调用代码避免确定实例化基类的步骤。
       工厂模式 实际上就是建立一个统一的类实例化的函数接口。统一调用,统一控制。
       工厂模式是php项目开发中,最常用的设计模式,一般会配合单例模式一起使用,来加载php类库中的类。
    b.应用场景
        1.我们拥有一个Json类,String类,Xml类。
        2.如果我们不使用工厂方式实例化这些类,则需要每一个类都需要new一遍,过程不可控,类多了,到处都是new的身影
        3.引进工厂模式,通过工厂统一创建对象实例。
    c.代码示例
<?php
class factory{
	public static function create($class){
		return new $class;
	}
}
class string{
	public function write(){}
}
class json{
	public function getJsonData(){}
}
class xml{
	public function buildXml(){}
}
var_dump(factory::create('string'));

4.策略模式
    a.含义:策略模式设计帮助构建的对象不必自身包含逻辑,而是能够根据需要利用其他对象中的算法
    b.应用场景:
        1.例如有一个CD类,我们类存储了CD的信息。
        2.原先的时候,我们在CD类中直接调用getCD方法给出XML的结果
        3.随着业务扩展,需求方提出需要JSON数据格式输出
        4.这个时候我们引进了策略模式,可以让使用方根据需求自由选择是输出XML还是JSON
    c.代码示例
<?php
class cd{
	protected $cdArr;
	public function __construct($title,$info){
		$this->cdArr['title'] = $title;
		$this->cdArr['info'] = $info;
	}
	public function getCd($typeObj){
		return $typeObj->get($this->cdArr);
	}
}
class json{
	public function get($return_data){
		return json_encode($return_data);
	}
}
class xml{
	public function get($return_data){
		$xml='<?xml version="1.0" encoding="utf-8" ?>';
		$xml.='<return>';
		$xml.='<data>'.serialize($return_data).'</data>';
		$xml.='</return>';
		return $xml;
	}
}
$cd = new cd('cd_1','cd_1');
echo $cd->getCd(new json)."<br>";
echo $cd->getCd(new xml)."<br>";



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值