婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP設(shè)計模式之裝飾器模式定義與用法詳解

PHP設(shè)計模式之裝飾器模式定義與用法詳解

熱門標簽:寧波外呼營銷系統(tǒng) 福建銀行智能外呼系統(tǒng)價格 四川保險智能外呼系統(tǒng)供應(yīng)商 房產(chǎn)中介用的是什么外呼系統(tǒng) 上海做外呼線路的通信公司 遼寧ai電銷機器人價格 長沙做地圖標注公司 地圖標注專員怎么樣 電話機器人銷售主要負責什么

本文實例講述了PHP設(shè)計模式之裝飾器模式定義與用法。分享給大家供大家參考,具體如下:

什么是裝飾器模式

作為一種結(jié)構(gòu)型模式, 裝飾器(Decorator)模式就是對一個已有結(jié)構(gòu)增加"裝飾".

適配器模式, 是為現(xiàn)在有結(jié)構(gòu)增加的是一個適配器類,.將一個類的接口,轉(zhuǎn)換成客戶期望的另外一個接口.適配器讓原本接口不兼容的類可以很好的合作.

裝飾器模式是將一個對象包裝起來以增強新的行為和責任.裝飾器也稱為包裝器(類似于適配器)

有些設(shè)計設(shè)計模式包含一個抽象類,而且該抽象類還繼承了另一個抽象類,這種設(shè)計模式為數(shù)不多,而裝飾器就是其中之一.

什么時候使用裝飾器模式

基本說來, 如果想為現(xiàn)有對象增加新功能而不想影響其他對象, 就可以使用裝飾器模式.如果你好不容易為客戶創(chuàng)建了一個網(wǎng)站格式, 主要組件的工作都很完美, 客戶請求新功能時, 你肯定不希望推翻重來, 再重新創(chuàng)建網(wǎng)站. 例如, 假設(shè)你已經(jīng)構(gòu)建了客戶原先請求的組件, 之后客戶又有了新的需求, 希望在網(wǎng)站中包含視頻功能. 你不用重寫原先的組件, 只需要"裝飾"現(xiàn)有組件, 為它們增加視頻功能. 這樣即可以保持原來的功能,還可以增加新功能.

有些項目可能有時需要裝飾, 而有時不希望裝飾, 這些項目體現(xiàn)了裝飾器設(shè)計模式的另一個重要特性.假設(shè)你的基本網(wǎng)站開發(fā)模式可以滿足大多數(shù)客戶的要求. 不過, 胡些客戶還希望有一些特定的功能來滿足他們的需求. 并不是所有人都希望或需要這些額外的功能. 作為開發(fā)人員, 你希望你創(chuàng)建的網(wǎng)站能滿足客戶的業(yè)務(wù)目標. 所以需要提供"本地化"(customerization)特性, 即針對特定業(yè)務(wù)提供的特性. 利用裝飾器模式, 不僅能提供核心功能, 還可以用客戶要求的特有功能"裝飾"這些核心功能.

簡單的裝飾器例子

一個web開發(fā)企業(yè),計劃建立一個基本網(wǎng)站,并提供一些增強功能. 不過,web開發(fā)人員知道, 盡管這個基本計劃適用于大多數(shù)客戶, 但客戶以后很可能還希望進一步提升, 利用裝飾器模式, 可以很容易地增加多個具體裝飾器,另外由于你能選擇要增加的裝飾器, 所以企業(yè)不僅能控制功能, 還可以控制項目的成本 .

Component接口

Component參與者是一個接口, 在這里, 它是一個抽象類IComponent. 這個抽象類只有一個屬性$site, 另外有兩個抽象方法getSite()getPrice().Component參與者具體為具體組件和Decorator參與者抽象類建立接口:

IComponent.php

?php
abstract class IComponent
{
  protected $site;
  abstract public function getSite();
  abstract public function getPrice();
}

Decorator接口

這個例子中的裝飾器接口可能會讓你驚訝.這是一個抽象類,而且它還擴展了另一個抽象類! 這個類的作用就是維護組件接口(IComponent)的一個引用, 這是通過擴展IComponent完成的:

Decorator.php

?php
abstract class Decorator extends IComponent
{
  /*
  任務(wù)是維護Component的引用
  繼承g(shù)etSite()和getPrice()
  因為仍然是抽象類,所以不需要實現(xiàn)父類任何一個抽象方法
  */
}

Decorator類的主要作用就是維護組件接口的一個引用.

在所有的裝飾器模式實現(xiàn)中, 你會發(fā)現(xiàn),具體組件和裝飾順都有相同的接口. 它們的實現(xiàn)可能不同, 另外除了基本接口的屬性和方法外, 組件和裝飾器可能還有額外的屬性和方法.

具體組件

這個例子中只有一個具體組件,它生成一個網(wǎng)站名, 另外生成一個基本網(wǎng)站報價:

BasicSite.php

?php
class BasicSite extends IComponent
{
  public function __construct()
  {
    $this->site = "Basic Site";
  }
  public function getSite()
  {
    return $this->site;
  }
  public function getPrice()
  {
    return 1200;
  }
}

兩個抽象方法都使用直接賦值來實現(xiàn), 不過靈活性并不體現(xiàn)在如何改變設(shè)置的值.實際上, 要通過增加裝飾器值來改變"Basic Site"值.

具體裝飾器

這個例子中的具體裝飾器與具體組件有相同的接口.實際上, 它們是從Decorator抽象類(而不是IComponent類)繼承了這個接口. 不過,要記住, Decorator所做的就是繼承IComponent接口.

Maintenance.php

?php
class Maintenance extends Decorator
{
  public function __construct(IComponent $siteNow)
  {
    $this->site = $siteNow;
  }
  public function getSite()
  {
    $format = "br /> Maintenance";
    return $this->site->getSite() . $format;
  }
  public function getPrice()
  {
    return 950 + $this->site->getPrice();
  }
}

這個裝飾器Maintenance在改變了site的值, 還有包裝的具體組件價格上還會增加它自己 的價格. 另個兩個具體裝飾器與Maintenance裝飾器也類似

Video.php

?php
class Video extends Decorator
{
  public function __construct(IComponent $siteNow)
  {
    $this->site = $siteNow;
  }
  public function getSite()
  {
    $format = "br /> Video";
    return $this->site->getSite() . $format;
  }
  public function getPrice()
  {
    return 350 + $this->site->getPrice();
  }
}

DataBase.php

?php
class DataBase extends Decorator
{
  public function __construct(IComponent $siteNow)
  {
    $this->site = $siteNow;
  }
  public function getSite()
  {
    $format = "br /> DataBase";
    return $this->site->getSite() . $format;
  }
  public function getPrice()
  {
    return 800 + $this->site->getPrice();
  }
}

測試這個應(yīng)用時,可以看到,在基本的價格之上還會增加各個裝飾器的價格.另外還能指定裝飾器名的格式, 增加了兩個空格,使之縮進

裝飾器實現(xiàn)中最重要的元素之五就是構(gòu)造函數(shù), 要為構(gòu)造函數(shù)提供一個組件類型. 由于這里只有一個具體組件, 所有裝飾器的實例化都會使用這個組件. 使用多個組件時, 裝飾器可以包裝應(yīng)用中的一部分或全部組件, 也可以不包裝任何組件.

客戶

Client類并不是這個設(shè)計模式的一部分, 但是正確使用Client類至關(guān)重要.每個裝飾器在實例化時"包裝"組件, 不過, 首先必須創(chuàng)建一個要包裝的對象, 這里是BasicSite類實例

Client.php

?php
function __autoload($class_name)
{
  include $class_name . '.php';
}
class Client
{
  private $basicSite;
  public function __construct()
  {
    $this->basicSite = new BasicSite();
    $this->basicSite = $this->WrapComponent($this->basicSite);
    $siteShow = $this->basicSite->getSite();
    $format = "br /> strong>Total= $";
    $price = $this->basicSite->getPrice();
    echo $siteShow . $format . $price . "/strong>";
  }
  private function WrapComponent(IComponent $component)
  {
    $component = new Maintenance($component);
    $component = new Video($component);
    $component = new DataBase($component);
    return $component;
  }
}
$worker = new Client();

wrapComponent()方法檢查傳入的BasicSite實例, 以確保參數(shù)有正確的數(shù)據(jù)類型(IComponent), 然后分別實例化3個裝飾器, 對該實例對象進行裝飾.

Basic Site
  Maintenance
  Video
  DataBase
  Total= $3300

適配器和裝飾器模式都有另外一個名字"包裝器"(wrapper)".

適配器可以"包裝"一個對象, 創(chuàng)建一個與Adaptee兼容的接口, 而無須對它做任何修改.

裝飾器也可以"包裝"一個組件對象, 這樣就能為這個已胡的組件增加職責, 而無須對它做任何修改.

下面的代碼展示了Client如何將組件對象($component)包裝在裝飾器(Maintence)中:

$component = new Maintenance($component);

類似于"接口", 在計算機編程中用到"包裝器"時, 不同的上下文會有不同的用法和含義. 一般來講, 在設(shè)計模式中使用"包裝器"是為了處理接口的不兼容, 或者希望為組件增加功能,包裝器就表示用來減少不兼容性的策略.

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP基本語法入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設(shè)計有所幫助。

您可能感興趣的文章:
  • 學習php設(shè)計模式 php實現(xiàn)裝飾器模式(decorator)
  • PHP簡單裝飾器模式實現(xiàn)與用法示例
  • PHP設(shè)計模式之裝飾器模式實例詳解
  • PHP設(shè)計模式之裝飾器模式定義與用法簡單示例
  • PHP設(shè)計模式(七)組合模式Composite實例詳解【結(jié)構(gòu)型】
  • PHP設(shè)計模式(六)橋連模式Bridge實例詳解【結(jié)構(gòu)型】
  • PHP設(shè)計模式(五)適配器模式Adapter實例詳解【結(jié)構(gòu)型】
  • PHP設(shè)計模式(四)原型模式Prototype實例詳解【創(chuàng)建型】
  • PHP設(shè)計模式(三)建造者模式Builder實例詳解【創(chuàng)建型】
  • PHP設(shè)計模式(一)工廠模式Factory實例詳解【創(chuàng)建型】
  • PHP設(shè)計模式概論【概念、分類、原則等】
  • PHP設(shè)計模式(八)裝飾器模式Decorator實例詳解【結(jié)構(gòu)型】

標簽:工商登記 佛山 延安 宜春 澳門 深圳 宿遷 常德

巨人網(wǎng)絡(luò)通訊聲明:本文標題《PHP設(shè)計模式之裝飾器模式定義與用法詳解》,本文關(guān)鍵詞  PHP,設(shè)計模式,之,裝飾,器,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP設(shè)計模式之裝飾器模式定義與用法詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP設(shè)計模式之裝飾器模式定義與用法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    性久久久久久久| 悠悠色在线精品| 久久久久成人黄色影片| 精品美女一区二区| 男男成人高潮片免费网站| 色综合久久天天综合网| 国产精品美女久久久久久久网站| 久久精品无码一区二区三区| 国产精品一二二区| 国产欧美一区二区在线| 国内精品久久久久影院色 | 日韩精品午夜视频| 97se亚洲国产综合在线| 一区二区免费看| 在线观看亚洲一区| 一区二区在线观看视频在线观看| 午夜精品福利久久久| 4hu四虎永久在线影院成人| 亚洲精品乱码久久久久久黑人| 不卡欧美aaaaa| 日韩三级免费观看| a在线播放不卡| 中文字幕永久在线不卡| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲1区2区3区4区| 欧美一卡二卡在线| 激情av综合网| 精品久久久久久最新网址| 91亚洲永久精品| 亚洲一区二区在线免费看| 欧美日韩一级二级三级| 丝瓜av网站精品一区二区| www激情久久| 99久久夜色精品国产网站| 亚洲激情中文1区| 日韩欧美在线网站| 国产清纯美女被跳蛋高潮一区二区久久w | 一区二区三区不卡在线观看| 欧美在线一区二区三区| 免费成人在线观看| 久久先锋影音av鲁色资源| 成人免费毛片嘿嘿连载视频| 亚洲福利一区二区| 日本一区二区三区视频视频| 欧美精品在线视频| 91精品91久久久中77777| 高清国产一区二区| 国产精品18久久久久久久久 | 紧缚捆绑精品一区二区| 亚洲国产精品影院| 亚洲人123区| 亚洲天堂免费看| 国产亚洲精品久| 日韩欧美精品三级| 在线成人免费视频| 欧美美女一区二区三区| 精品视频999| 欧美日韩亚洲综合在线| 欧美日韩在线三级| 欧美亚洲丝袜传媒另类| 色婷婷精品久久二区二区蜜臀av | 成人污视频在线观看| 国产曰批免费观看久久久| 久久精品72免费观看| 久久精品二区亚洲w码| 久久爱www久久做| 久久精品av麻豆的观看方式| 久久精品国产免费| 国产一区二区精品久久99| 国产精品99久久不卡二区| 国产一区二区伦理片| 成人网页在线观看| 一本大道久久a久久综合| 欧美性极品少妇| 8v天堂国产在线一区二区| 欧美本精品男人aⅴ天堂| 精品国产髙清在线看国产毛片| 日韩精品在线看片z| 日韩精品一区二区三区四区| 26uuu色噜噜精品一区| 最新中文字幕一区二区三区| 亚洲va欧美va人人爽午夜| 美女www一区二区| 不卡在线视频中文字幕| 欧美片网站yy| 国产三级一区二区三区| 亚洲一区二区三区不卡国产欧美| 免费在线视频一区| 国产成人亚洲精品青草天美| 91国产福利在线| 久久久久久麻豆| 亚洲视频你懂的| 蜜桃传媒麻豆第一区在线观看| 高清国产午夜精品久久久久久| 在线视频欧美区| 久久久精品黄色| 午夜精品久久一牛影视| 国产乱妇无码大片在线观看| 色综合视频一区二区三区高清| 91精品国模一区二区三区| 中文字幕一区三区| 精品一区二区在线观看| 欧美唯美清纯偷拍| 欧美国产精品一区二区三区| 日韩成人一级大片| 色哟哟一区二区| 国产欧美一区二区精品忘忧草 | 精品亚洲porn| 欧洲另类一二三四区| 久久你懂得1024| 天天综合网 天天综合色| 成人精品在线视频观看| 在线观看91av| 一卡二卡三卡日韩欧美| 丁香六月综合激情| 日韩欧美三级在线| 日韩不卡在线观看日韩不卡视频| 成人av网站在线| 国产午夜精品在线观看| 日本欧美韩国一区三区| 91精品91久久久中77777| 日本一区二区免费在线| 狠狠色狠狠色综合日日91app| 91麻豆精品91久久久久久清纯 | 精品一区二区免费视频| 欧美综合色免费| 亚洲人成网站在线| 91丝袜美女网| 中文字幕一区二区5566日韩| 国产剧情av麻豆香蕉精品| 欧美mv和日韩mv国产网站| 日本女人一区二区三区| 91精品国产麻豆国产自产在线 | 欧美色综合网站| 亚洲一卡二卡三卡四卡| 色呦呦国产精品| 亚洲美女屁股眼交| 91国偷自产一区二区开放时间| 亚洲精品久久久久久国产精华液| 91蝌蚪porny九色| 中文字幕日韩一区| 色婷婷久久久综合中文字幕| 亚洲自拍与偷拍| 欧美精品成人一区二区三区四区| 亚洲成人手机在线| 日韩午夜电影av| 国产在线精品一区二区| 国产欧美一区在线| 91蜜桃网址入口| 亚洲国产精品一区二区www| 欧美亚一区二区| 麻豆精品久久久| 国产片一区二区三区| 91免费视频网| 免费成人美女在线观看.| 久久色视频免费观看| av一区二区三区四区| 亚洲精品日韩专区silk| 日韩欧美一区二区久久婷婷| 国产一区在线观看麻豆| 中文字幕在线一区二区三区| 欧美三级在线播放| 国产精品一区二区在线观看不卡 | 麻豆精品蜜桃视频网站| 国产日韩欧美a| 色综合天天性综合| 人人狠狠综合久久亚洲| 国产精品欧美精品| 欧美欧美欧美欧美首页| 国产精品一区二区三区99| 国产精品乱人伦中文| 欧美色爱综合网| 东方欧美亚洲色图在线| 亚洲精品中文字幕乱码三区| 欧美不卡一区二区三区四区| 97久久人人超碰| 免费成人你懂的| 亚洲人精品午夜| 欧美一卡二卡在线| 欧美在线一区二区三区| 东方aⅴ免费观看久久av| 日本欧美一区二区三区| 中文字幕亚洲区| 26uuu亚洲| 日韩片之四级片| 欧美午夜精品久久久久久超碰| 国产精品一区二区91| 午夜精品久久久久影视| 亚洲色图欧洲色图婷婷| 久久久久青草大香线综合精品| 欧美精三区欧美精三区| 在线视频国产一区| 北岛玲一区二区三区四区| 国产乱子轮精品视频| 免费观看日韩电影| 日韩精品亚洲一区| 午夜婷婷国产麻豆精品| 一区二区三区**美女毛片| 亚洲欧美日韩久久精品| 国产欧美va欧美不卡在线|