天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP面向對象學習筆記之二 生成對象的設計模式

一. 單例模式(Singleton)
如果應用程序每次包含且僅包含一個對象,那么這個對象就是一單例. 用來替代全局變量.
復制代碼 代碼如下:
<?php
require_once("DB.php");
class DatabaseConnection{
<STRONG><SPAN style="COLOR: #ff0000">public static function get()</SPAN></STRONG>{
static $db = null;
if ( $db == null )
$db = new DatabaseConnection();
return $db;
}
private $_handle = null;
<STRONG><SPAN style="COLOR: #ff0000">private function __construct()</SPAN></STRONG> {
$dsn = 'mysql://root:password@localhost/photos';
$this->_handle =& DB::Connect( $dsn, array() );
}
public function handle()
{
return $this->_handle;
}
}
print( "Handle = ".DatabaseConnection::get()->handle()."/n" );
print( "Handle = ".DatabaseConnection::get()->handle()."/n" );
?>


二.工廠方法模式(factory method)要解決的問題:

1>在代碼運行時候才知道要生成的對象類型; 2>對象類型可能要擴充新產品類型; 3>每個產品類型都可以定制特定的功能;工廠方法模式把創建者類與要生產的產品類分離.創建者是一個工廠類,其中定義了用于生成產品對象的類方法.如果沒有提供默認實現,就由創建者類的子類來執行實例化.一般情況下,就是每個創建者類的子類實例化一個相應的產品子類.工廠模式的優點就在創建對象上。 它的任務就是把對象的創建過程都封裝起來,然后返回一個所需要的新類。想改變對象的結構和建立對象的方式,只需選擇對象工廠,對代碼的改變只需要一次就夠了。( 工廠模式的功能是如此強大, 它處于是應用的底層, 所以在許多其余的復雜模式和應用中它會不停地出現。)不同處理對象,內部自動分流處理,但對用戶來說,只有一個方法,簡單方便 使用接口方式實踐工廠模式的例子:
復制代碼 代碼如下:
interface Hello{
function say_hello();
}
class English implements Hello{
public function say_hello(){
echo "Hello!";
}
}
class Chinese implements Hello{
public function say_hello(){
echo "你好";
}
}
class speak{
public static function factory($type){
if($type == 1) $temp = new English();
else if($type == 2) $temp = new Chinese();
else{
die("Not supported!");
}
return $temp;
}
}
$test = Speak::factory(1);
$test->say_hello();

在<深入淺出設計模式>中,上面的被稱為簡單工廠模式,因為這個工廠必須能分辨要生產的全部產品.如果有新的產品,必須對工廠進行對應修改,增加相應的業務邏輯或判斷.簡單工廠模式的一個標志就是靜態方法實現工廠生產功能.(不簡單的)工廠方法模式: 工廠方法是抽象類或接口,具體工廠實現這個方法(接口),讓使用者調用以創建具體產品對象(每一個產品都有對應的具體工廠)下面是重寫的hello
復制代碼 代碼如下:
//抽象工廠
interface Speaker{
function assignSpeaker();
}
//具體工廠1
class EnglishSpeaker implements Speaker{
public function assignSpeaker(){
return new English();
}
}
//具體工廠2
class ChineseSpeaker implements Speaker{
public function assignSpeaker(){
return new Chinese();
}
}
//抽象產品
interface Hello{
function say_hello();
}
//具體產品1
class English implements Hello{
public function say_hello(){
echo "Hello!";
}
}
//具體產品2
class Chinese implements Hello{
public function say_hello(){
echo "你好";
}
}

使用:
復制代碼 代碼如下:
if(!empty($_GET['t'])){
switch($_GET['t']){
case 1: $temp=new EnglishSpeaker();
break;
case 2: $temp=new ChineseSpeaker();
break;
}
$man=$temp->assignSpeaker();
$man->say_hello();
}

三.抽象工廠模式(Abstract Factory)產品族;每個實體工廠負責一個產品族(1,2...)的產品, 而每個產品族又劃分出幾個不同類別(A,B...)單從某一個實體工廠看,其實就是一個工廠方法模式

如果上面的hello例子,又多出來表達方式,正常和歌唱式表達(2個產品族)
復制代碼 代碼如下:
//抽象工廠
abstract class Speaker{
const NORMAL =1;
const SING =2;
abstract function assignSpeaker($flag_int);
}
//具體工廠1
class EnglishSpeaker extends Speaker {
public function assignSpeaker($flag_int){
switch($flag_int){
case self::NORMAL:
return new NormalEnglish();
break;
case self::SING:
return new SingEnglish();
break;
}
}
}
//具體工廠2
class ChineseSpeaker extends Speaker{
public function assignSpeaker($flag_int){
switch($flag_int){
case self::NORMAL:
return new NormalChinese();
break;
case self::SING:
return new SingChinese();
break;
}
}
}
//抽象產品
interface Hello{
function say_hello();
}
//具體產品A1
class NormalEnglish implements Hello{
public function say_hello(){
echo "Hello!";
}
}
//具體產品B1
class NormalChinese implements Hello{
public function say_hello(){
echo "你好!";
}
}
//具體產品A2
class SingEnglish implements Hello{
public function say_hello(){
echo "Oh, jingle bells, jingle bells, Hello! Hello! Hello!";
}
}
//具體產品B2
class SingChinese implements Hello{
public function say_hello(){
echo "叮叮當,叮叮當, 你好!你好!你好!";
}
}

使用:
復制代碼 代碼如下:
//根據程序的業務邏輯確定具體工廠
switch($_GET['language']){
case 1: $temp=new EnglishSpeaker();
break;
case 2: $temp=new ChineseSpeaker();
break;
}
//根據程序的業務邏輯確定具體產品,無需關心是哪個具體工廠了,維護性提高
$man=$temp->assignSpeaker( $_GET['style']);
//使用產品,無需關心是哪個具體產品
$man->say_hello();

四.原型模式(Prototype)
使用clone 來復制已存在的具體產品,然后具體產品類本身就成為他們自己生成的基礎.

php技術PHP面向對象學習筆記之二 生成對象的設計模式,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 人与禽交3d动漫羞羞动漫 | 91亚洲 欧美 国产 制服 动漫 | 一品道门免费高清视频 | 国产曰韩无码亚洲视频 | 国产免费变态视频网址网站 | 国产精品久久久亚洲偷窥女厕 | 国产免费怕怕免费视频观看 | 午夜福利92看看电影80 | 亚洲精品中文字幕无码A片蜜桃 | 国产传媒18精品免费观看 | 欧美亚洲日韩在线在线影院 | 欧美日韩另类在线观看视频 | 伊人影院综合在线 | 久久a在线视频观看 | 国产精品99久久久久久动态图 | av狼新人开放注册区 | 国产精品99久久免费黑人人妻 | 极品虎白在线观看 | 性xxxx直播放免费 | 午夜在线观看免费完整直播网 | 人妻天天爽夜夜爽三区麻豆A片 | 人人在线碰碰视频免费 | 麻豆精品传媒卡一卡二传媒短视频 | 国产人在线成免费视频 | 2021乱码精品公司 | 神马电影院午 夜理论 | 国产成人精品免费视频下载 | 厨房玩朋友娇妻中文字幕 | 久久青青草视频在线观 | 2019精品国产品在线不卡 | YELLOW高清视频免费观看 | 久久精品中文字幕 | 哪里能看毛片 | 国产亚洲精品久久久久5区 国产亚洲精品久久久久 | 美女视频黄a视频全免费网站色窝 | 午夜亚洲动漫精品AV网站 | 免费啪视频观试看视频 | 夜里18款禁用的免费B站动漫 | 青青app | 国产成人一区二区三区在线观看 | 国产成人精品123区免费视频 |