PHP 单例模式 工厂模式 策略模式代码理解

来源:互联网 发布:旗宇cms网站管理系统 编辑:程序博客网 时间:2024/05/17 03:06
//单个类 单例<?php/***单例模式:一个类只能有一个对象*三私一公*/class MySQLDB {private static $instance;//私有的成员用来保存类的实例private function __construct() {//私有的构造函数阻止在类的外部实例化}private function __clone() {//私有的__clone()阻止clone对象}public static function getInstance() {//公有的方法用来获取类的实例if(!self::$instance instanceof self )self::$instance=new self;return self::$instance;}}$db1=MySQLDB::getInstance();$db2=MySQLDB::getInstance();var_dump($db1,$db2);//项目层面单例封装<?phpclass DB1 {}class DB2 {}class DB3 {}function getInstance($db_name) {static $array=array(); //通过数组来保存类的单例if(!isset($array[$db_name]))$array[$db_name]=new $db_name;return $array[$db_name];}$db1=getInstance('DB1');$db2=getInstance('DB2');$db3=getInstance('DB3');var_dump($db1,$db2,$db3); //object(DB1)#1 (0) { } object(DB2)#2 (0) { } object(DB3)#3 (0) { } //=========工厂模式<?phpheader('content-type:text/html;charset=utf-8');abstract class Product {abstract public function getName();}class ProductA extends Product  {public function getName() {echo '这是A商品<br>';}}class ProductB extends Product {public function getName() {echo '这是B商品<br>';}}//工厂模式class ProductFactory {public static function create($num) {switch($num) {case 1:return new ProductA();case 2:return new ProductB();}return null;}}//传递不同的参数获取不同的对象$obj=ProductFactory::create(1);$obj->getName(); //这是A商品$obj=ProductFactory::create(2);$obj->getName(); //这是B商品//=======策略模式<?phpheader('content-type:text/html;charset=utf-8');interface IStrategy {function ontheway();}class Walk implements IStrategy {public function ontheway() {echo '走着去<br>';}}class Bick implements IStrategy {public function ontheway() {echo '骑自行车去<br>';}}class Bus implements IStrategy {public function ontheway() {echo '坐巴士去<br>';}}//策略模式,传递不同的参数,调用不同的策略class Strategy{public function getWay(IStrategy $obj) {$obj->ontheway();}}$obj=new Strategy();$obj->getWay(new Walk); //走着去$obj->getWay(new Bick); //骑自行车去$obj->getWay(new Bus); //坐巴士去
原创粉丝点击