• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Javascript的裝飾器模式與php、python對比用法詳解

    來源:懂視網 責編:小采 時間:2020-11-27 20:15:16
    文檔

    Javascript的裝飾器模式與php、python對比用法詳解

    Javascript的裝飾器模式與php、python對比用法詳解:修飾模式(Decorator Pattern),又叫裝飾者模式,是面向對象編程領域中,一種動態地往一個類中添加新的行為的設計模式。就功能而言,修飾模式相比生成子類更為靈活,這樣可以給某個對象而不是整個類添加一些功能。例如,有一個技術論壇,用戶通過留言進行溝通
    推薦度:
    導讀Javascript的裝飾器模式與php、python對比用法詳解:修飾模式(Decorator Pattern),又叫裝飾者模式,是面向對象編程領域中,一種動態地往一個類中添加新的行為的設計模式。就功能而言,修飾模式相比生成子類更為靈活,這樣可以給某個對象而不是整個類添加一些功能。例如,有一個技術論壇,用戶通過留言進行溝通

    修飾模式(Decorator Pattern),又叫裝飾者模式,是面向對象編程領域中,一種動態地往一個類中添加新的行為的設計模式。就功能而言,修飾模式相比生成子類更為靈活,這樣可以給某個對象而不是整個類添加一些功能。

    例如,有一個技術論壇,用戶通過留言進行溝通,由于剛開始論壇里都是熟人,幾乎都不需要對留言的內容作出審核,接收留言的頁面可以是這樣:

    class SaveMsg(){
     private $msg;
     public function __construct($msg){
     $this->msg=$msg;
     }
     public function __store(){
     //存入數據庫
     }
    }

    后來,隨著論壇逐漸出名,就有一些人在上面發鏈接,就需要對含有鏈接的消息進行過濾,論壇進一步發展,發現除開發垃圾鏈接的外,還有很多無用的灌水,到后來可能還有攻擊等等各種不正常的帖子,所以對論壇帖子的管理,可以單獨抽象出一個類進行管理,當需要擴充過濾規則時,可以進行動態擴充。

    //基類
    abstract class Filter{
     abstract public function isForbid();
    }
    //基礎過濾類
    class MsgFilter extends Filter{
     public $content;
     public function __construct($msg){
     $this->content=$msg;
     }
     public function isForbid(){
     if(preg_match("/https?/i",$this->content)){
     return [true,"Not Allowed Urls"];
     }else{
     return [false];
     }
     }
    }
    //裝飾器,用來擴充功能
    abstract class FilterDecorator extends Filter{
     protected $obj;
     public function __construct(Filter $obj){
     $this->obj=$obj;
     }
    }
    //新過濾器,判斷是否重復發帖
    class repeat extends FilterDecorator{
     public function isForbid(){
     if($this->obj->isForbid()[0] === true){
     //判定是否包含url
     return $this->obj->isForbid();
     }else if($this->obj->content == "this is a test"){
     //判定是否重復發帖
     return [true,"Repeat Posts"];
     }else{
     return [false];
     }
     }
    }
    $test = new MsgFilter("httpsfdjoafdsajof");
    print_r($test->isForbid());//被禁止
    $test2 = new repeat(new MsgFilter("this is a test"));
    print_r($test2->isForbid());//被禁止

    在python中,不存在抽象類和方法,實現就更加簡單:

    #!/usr/bin/env python
    class Filter():
     pass
    class MsgFilter(Filter):
     def __init__(self,msg):
     self.content=msg
     def isForbid(self):
     if('http' in self.content):
     return [True,"Not Allowed Urls"]
     else:
     return [False]
    class FilterDecorator(Filter):
     def __init__(self,obj):
     self._obj=obj
    class Repeat(FilterDecorator):
     def isForbid(self):
     if self._obj.isForbid()[0]:
     return self._obj.isForbid()
     elif self._obj.content == 'this is a test':
     return [True,"Repeat Posts"];
     else:
     return [False]
    test = MsgFilter("this is a content have http urls")
    print test.isForbid()
    test2 = Repeat(MsgFilter('this is a test'))
    print test2.isForbid()

    Javascript中,沒有嚴格的類,所有繼承都基于原型,理解起來會稍費功夫:

    由于Javascript缺少類的特性,繼承對于它來說就顯得有點雞肋了,上面的代碼看起來更像是對兩個函數的處理, 在python中,有更加簡單的添加裝飾器的方法,直接通過”@”給函數自動添加裝飾器,達到擴展功能的目的,如:

    裝飾模式的目的是解決動態擴展功能的難題,裝飾模式的本質是對對象的靈活處理,理解裝飾模式,不僅能深入了解面向對象的程序設計,更能提高編程的思維能力。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Javascript的裝飾器模式與php、python對比用法詳解

    Javascript的裝飾器模式與php、python對比用法詳解:修飾模式(Decorator Pattern),又叫裝飾者模式,是面向對象編程領域中,一種動態地往一個類中添加新的行為的設計模式。就功能而言,修飾模式相比生成子類更為靈活,這樣可以給某個對象而不是整個類添加一些功能。例如,有一個技術論壇,用戶通過留言進行溝通
    推薦度:
    標簽: 裝飾 模式 php
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲国产精品国产自在在线| 无码日韩人妻精品久久蜜桃 | 麻豆精品国产自产在线观看一区| 麻豆成人久久精品二区三区免费| 国产女人18毛片水真多18精品| 精品无码无人网站免费视频| 精品无码国产自产拍在线观看蜜| 久久91综合国产91久久精品| 亚洲国产精品久久电影欧美| 久久人人超碰精品CAOPOREN| 成人国内精品久久久久影院VR| 国产成人vr精品a视频| 亚洲一区无码精品色| 国产专区日韩精品欧美色| 久久精品国产亚洲网站| 久久精品人成免费| 无码精品视频一区二区三区| 日韩一区二区三区精品| 精品久久久久国产免费 | 国产精品videossex白浆| 九九精品在线观看| 2021久久精品国产99国产精品| 久久精品国产99久久久| 日韩AV无码精品人妻系列| 亚洲精品无码激情AV| 男女男精品网站免费观看| 黑人巨茎精品欧美一区二区| 国产高清在线精品一区二区三区| 中文精品久久久久国产网址| 久久这里只有精品久久| 国产精品久久久天天影视| 99re热视频这里只精品| 55夜色66夜色国产精品视频| 91精品国产91久久综合| 97久久精品人妻人人搡人人玩| 国产探花在线精品一区二区| 久久99精品久久久久子伦| 国产精品久久久亚洲| 国产精品久久久久jk制服| 囯产精品一品二区三区| 国产精品合集一区二区三区|