<?php /*单例模式: *1、一个private的__construct是必须的,单例类不能在其它类中实例化,只能被自身实例化; *2、拥有一个保存类的实例的静态成员变量; *3、一个静态的公共方法用于实例化这个类,并访问这个类的实例; * */ class Danli { //保存类的实例的静态成员变量 static private $_instance=null; //私有的构造方法 private function __construct(){ echo "这是一个构造方法<br>"; } //用于访问类的实例的公共的静态方法 static public function getInstance(){ if(!(self::$_instance instanceof Danli)){ echo "实例化<br>"; self::$_instance = new self; } return self::$_instance; } //类的其它方法 public function test(){ //$this->__construct(); echo "调用成功<br>"; } } $first = Danli::getInstance(); $first->test(); echo "<hr/>"; $second = Danli::getInstance(); $second->test(); echo "<hr/>"; /* * 工厂模式 *使用工厂模式的好处是,如果你想要更改所实例化的类名等, * 则只需更改该工厂方法内容即可,不需逐一寻找代码中具体实例化的地方(new处)修改了。 * 为系统结构提供灵活的动态扩展机制,减少了耦合 * */ interface Drink{ public function getDrinkName(); } class AppleDrink implements Drink{ public function getDrinkName() { echo "苹果味"; } } class BananaDrink implements Drink{ public function getDrinkName() { echo "香蕉味"; } } class OrangeDrink implements Drink{ public function getDrinkName() { echo "橘子味"; } } interface FruitFactory{ public function makeDrink(); } class AppleFactory implements FruitFactory{ public function makeDrink() { return new AppleDrink(); } } class BananaFactory implements FruitFactory{ public function makeDrink() { return new BananaDrink(); } } class OrangeFactory implements FruitFactory{ public function makeDrink() { return new OrangeDrink(); } } $appleFactory = new AppleFactory(); $apple = $appleFactory->makeDrink(); $apple->getDrinkName(); $orangeFactory = new OrangeFactory(); $orange = $orangeFactory->makeDrink(); $orange->getDrinkName(); echo "<hr>"; /* * 策略模式 * *1.定义抽象角色类(定义好各个实现的共同抽象方法) *2.定义具体策略类(具体实现父类的共同方法) *3.定义环境角色类(私有化申明抽象角色变量,重载构造方法,执行抽象方法) * * */ abstract class baseAgent { //抽象策略类 abstract function PrintPage(); } //用于客户端是IE时调用的类(环境角色) class ieAgent extends baseAgent { function PrintPage() { return 'IE'; } } //用于客户端不是IE时调用的类(环境角色) class otherAgent extends baseAgent { function PrintPage() { return 'not IE'; } } class Browser { //具体策略角色 public function call($object) { return $object->PrintPage(); } } $bro = new Browser (); echo $bro->call ( new ieAgent () ); echo "<hr>";
浙公网安备 33010602011771号