<?php //__get() //__set()当对象中属性不存在时调用该魔术方法 //__call()当对象中方法不存在时 //__callStatic()静态方法 //__string()当对象不能转换成字符串时使用__string() //__invoke()对象不能直接当成一个函数使用 //工厂模式,是有一个工厂创建类,通过工厂调用:: 工厂方法或者类生成对象,而不是在代码中直接new //单例模式,一个类只有一个对象,例如要连接数据库使用一次就可以了,使某个类的对象仅允许创建一次 //注册模式,全局共享和交换对象
//单例设计模式 //设计模式讲究对象之间关系的抽象 //单例模式只有自己一个对象 //单例模式应用场景: //1.应用程序与数据库交互 // 使用单例模式可以避免大量的new操作,每次new操作都会消耗内存资源和系统资源 //2.控制配置信息 //系统中需要有一个类来全局控制某些配置信息 //策略模式 //策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境, //实例:加入一个电商网站,针对男性女性用户要跳转到不同的电商类目,并且所有的广告位展示不同的广告 //可以实现Ioc,依赖导致,控制反转 /** * 工厂模式例1 */ interface person{ public function say(); } class man implements person{ public function say(){ echo "我是男生<br>"; } } class woman implements person{ public function say(){ echo "我是女生<br>"; } } class simpleFactoty{ static function createman(){ return new man(); } static function createwoman(){ return new woman(); }
} $man = simpleFactoty::createman(); $man->say(); $woman = simpleFactoty::createwoman(); $woman->say(); /** * 工厂模式例2 */ interface transport{
public function go();
}
class bike implements transport{
public function go(){
echo "bike跑的慢<br>";
}
}
class car implements transport{
public function go(){
echo "car开的快<br>";
}
}
class bus implements transport{
public function go(){
echo "bus每一站都要停<br>";
}
}
class transFactory{
public static function factory($transport){
switch($transport){
case 'bike':
return new bike();
break;
case 'car':
return new car();
break;
case 'bus':
return new bus();
break;
}
}
}
$transport = transFactory::factory('car'); $transport->go(); /** * 单例模式例1 */ class Single { private $name;//声明一个私有的实例变量 private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。 } static public $instance;//声明一个静态变量(保存在类中唯一的一个实例) static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象 if(!self::$instance) self::$instance = new self(); return self::$instance; } public function setname($n){ $this->name = $n; } public function getname(){ return $this->name; } } $oa = Single::getinstance(); $ob = Single::getinstance(); $oa->setname('hello world'); $ob->setname('good morning'.'<br>'); echo $oa->getname();//good morning echo $ob->getname();//good morning
/** * 单例模式例2 */ class uni{ static private $instance;//创建静态私有的变量保存该类对象 private $config;//参数 private function __construct($config){ $this->config = $config; echo "我被实例化了"; } private function __clone(){
} //提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用 static public function getInstance($config){//判断$instance是否是UNI的对象 if(!self::$instance instanceof self){//判断一个对象是否是某个类的实例 self::$instance = new self($config); } return self::$instance; } public function getName(){ echo $this->config; }
} $db1 = uni::getInstance(1); $db1->getName(); echo "<br>"; $db2 = uni::getInstance(4); $db2->getName(); echo "<br>"; /** * 单例模式例3 */
class pzhang{
static private $instance;
private $config;
private function __construct($config){
$this->config = $config;
echo "我被实例化了";
}
private function __clone(){
}
static public function getInstance($config){
if(!self::$instance instanceof self)
self::$instance = new self($config);
return self::$instance;
}
public function getname(){
echo $this->config;
}
}
$adb = pzhang::getInstance(1);
$adb->getname(); echo "<br>"; /** * 策略模式 */ interface baseAgent{//抽象策略角色 public function do_method(); } class ConcreteStrategyA implements baseAgent{//具体策略角色 public function do_method(){ echo "do method a"; } } class ConcreteStrategyB implements baseAgent{//具体策略角色 public function do_method(){ echo "do method b"; } } class ConcreteStrategyC implements baseAgent{//具体策略角色 public function do_method(){ echo "do method b"; } } class Question{ // 环境角色 private $__strategy;
public function __construct(BaseAgent $baseAgent) { $this->__strategy = $baseAgent; } public function handle_question() { $this->__strategy->do_method(); } } $strategyA = new ConcreteStrategyA(); $question = new Question($strategyA); $question->handle_question();//输出do method A
$strategyB = new ConcreteStrategyB(); $question = new Question($strategyB); $question->handle_question();//输出do method B
$strategyC = new ConcreteStrategyC(); $question = new Question($strategyC); $question->handle_question();//输出do method C echo "<br>"; /** * 策略模式 */
interface pzhangt{//抽象策略角色
public function say();
}
class A implements pzhangt{//具体策略角色
public function say(){
echo "说see you";
}
}
class B implements pzhangt{
public function say(){
echo "说 good bay";
}
}
class questiont{
private $test;
public function __construct(Pzhangt $pzhangt){
$this->test = $pzhangt;
}
public function handle(){
$this->test->say();
}
}
$a = new A();
$res = new questiont($a);
$res->handle();
$b = new B();
$res = new questiont($b);
$res->handle();
?>
|
请发表评论