php设计模式学习记录(上)

        从事php后台的开发已经一年多了,慢慢的对CI等php框架有了越来越深入的了解,而开发的项目也是建立在php的框架之上,渐渐对底层的一些设计模式没有多少概念,最近在学习php的设计模式,发现框架其实是对大多的这些设计模式进行封装,同时又有些设计模式没有被利用,今天我就来给大家分享这几天学习php设计模式的一些心得。

1.工厂模式

工厂模式,顾名思义,将重复的操作封装到一个类一个方法里,一个是利于代码的复用性,也同时降低了代码维护的成本。以下贴出其简单的代码实例:

<span style="font-size:18px;"><?php
	class Factory 
	{
		static function createDatabase()
		{
			$db = new Database;
			return $db;
		}
	}
	//项目中代码中引用方法
	Factory::createDatabase();
?></span>

2.单例模式

这种设计模式,可以配合工厂模式使用,设想这样一个应用场景,class Database,封装了数据的操作方法,而我们的业务逻辑中,几乎每一个地方都会使用到链接数据库的操作,传统的做法中,我们会不断的$db = new Database;

这样对服务器带来不小的开销。因此对于这样频用的类,不允许多次创建,而是只允许创建一次,复用对象。

<?php
	class Database
	{
		protected $db;

		//关闭Database new的创建方式
		private function __construct()
		{
					
		}	
		//获得database对象的唯一入口
		static function getInstance()
		{
			if(self::$db)
				return self::$db;
			else {
				self::$db = new self();
				return self::$db;
			}
		}	
	}
?>
3.注册树模式

类似上面的两种设计模式,也是为了减少对象的创建,降低服务器的压力。在注册树模式当中,我们建议,将所有创建过的对象存储起来,我们可以在接下来的业务逻辑中,自由的调用。

<?php
	class Register
	{
		protected static $objects;

		static function set($alias, $object)
		{
			self::$objects[$alias] = $objecct;
		}
		
		static function get($name)
		{
			return self::$objects[$alias];	
		}	

		static function _unset($alias)
		{
			unset(self::$objects[$alias]);
		}
	}
?>
4.策略模式

这种设计模式,改变了在业务逻辑开发中,繁琐的if...else的使用,假设这样一个场景:在某个业务逻辑中,我们需要对不同身份的用户提供不同样的业务展示,那么我们需要使用if..else的语法来区分开不同身份,那么,如果身份的增加在代码的实现上,整个设计就会变得复杂而失逻辑。那么让我们看看策略模式吧

1)首先呈现不同的业务,但是符合相同的接口

interface UserStrategy{
	function showAd();
	function showLink();
}
2) 根据不同的身份编写不同的接口(此处身份就以男性、女性为例)
<?php
	class FemaleUserStrategy implements UserStrategy{
		function showAd(){
			echo "2015新款女装";
		}
		function showLink(){
			echo "www.taobao.com";
		}
	}
?>
<?php
	class MaleUserStrategy implements UserStrategy{
		function showAd(){
			echo "Ipad";
		}
		function showLink(){
			echo "www.jd.com";
		}
	}
?>
3)统一调度方式

<?php
	class Page{
		protected $strategy;

		function index()
		{
			echo "AD:";
			$this -> strategy ->showAd(); 
			echo  "Link:"
			$this -> strategy ->showLink(); 
		}
	}
	$page = new Page;
	if (isset($_GET['female'])){
		$strategy = new FemaleUserStrategy();
	}else {
		$strategy = new MaleUserStrategy();
	}
?>






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值