PHP 注册树模式

<?php

interface Number
{
	public function hero();
}

class Number1 implements Number
{
	public function hero()
	{
		return "一号位:矮子";
	}
}
class Number2 implements Number
{
	public function hero()
	{
		return "二号位:影魔";
	}
}
class Number3 implements Number
{
	public function hero()
	{
		return "三号位:女王";
	}
}
class Number4 implements Number
{
	public function hero()
	{
		return "四号位:抄袭";
	}
}
class Number5 implements Number
{
	public function hero()
	{
		return "五号位:冰女";
	}
}

class Factory
{
	public static function toYou($num)
	{
		switch($num)
		{
			case 1:
				return new Number1();
				break;
			case 2:
				return new Number2();
				break;
			case 3:
				return new Number3();
				break;
			case 4:
				return new Number4();
				break;
			case 5:
				return new Number5();
				break;	
		}
	}
}

//$a = Factory::toYou(1);
//echo $a->hero();

//	注册树
class Register
{
	protected static $objects;
	
	public static function set($alias,$object)
	{
		self::$objects[$alias] = $object;
	}
	
	public static function get($alias)
	{
		return self::$objects[$alias];
	}
	
	public static function _unset($alias)
	{
		unset(self::$objects[$alias]);
	}
}

Register::set('hero1',Factory::toYou(1));
Register::set('hero2',Factory::toYou(2));
Register::set('hero3',Factory::toYou(3));
Register::set('hero4',Factory::toYou(4));
Register::set('hero5',Factory::toYou(5));

$hero1 = Register::get('hero1');
$hero2 = Register::get('hero2');
$hero3 = Register::get('hero3');
$hero4 = Register::get('hero4');
$hero5 = Register::get('hero5');

echo $hero1->hero();
echo $hero2->hero();
echo $hero3->hero();
echo $hero4->hero();
echo $hero5->hero();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
策略模式是一种常见的设计模式,可以在 PHP 中很容易地实现。 策略模式的核心思想是将算法封装成一个个独立的策略,然后在运行时根据不同的情况选择不同的策略。这样可以使得算法的变化独立于使用算法的客户端,提高代码的可维护性和扩展性。 下面是一个 PHP 中的策略模式的例子: ```php // 定义策略接口 interface PaymentStrategy { public function pay($amount); } // 实现不同的策略 class CreditCardStrategy implements PaymentStrategy { public function pay($amount) { echo "Paid $amount via Credit Card."; } } class PaypalStrategy implements PaymentStrategy { public function pay($amount) { echo "Paid $amount via Paypal."; } } // 使用策略 class PaymentContext { private $strategy; public function __construct(PaymentStrategy $strategy) { $this->strategy = $strategy; } public function executeStrategy($amount) { $this->strategy->pay($amount); } } // 示例代码 $cc = new CreditCardStrategy(); $paypal = new PaypalStrategy(); $payment = new PaymentContext($cc); $payment->executeStrategy(100); $payment = new PaymentContext($paypal); $payment->executeStrategy(200); ``` 在这个例子中,我们定义了一个 `PaymentStrategy` 接口,包含了一个 `pay()` 方法,然后实现了两个不同的策略 `CreditCardStrategy` 和 `PaypalStrategy`。最后,我们使用 `PaymentContext` 来执行不同的策略。 这个例子很简单,但是可以看到策略模式的优点:算法的变化独立于客户端代码,我们可以轻松地增加、删除或修改不同的策略,而不需要修改客户端代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值