日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 常用设计模式demo

發布時間:2025/3/18 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 常用设计模式demo 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?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();


?>

轉載于:https://www.cnblogs.com/isuansuan/p/9755509.html

總結

以上是生活随笔為你收集整理的php 常用设计模式demo的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。