中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

PHP、Python和Javascript的裝飾器模式比較-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“PHP、Python和Javascript的裝飾器模式比較”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“PHP、Python和Javascript的裝飾器模式比較”吧!

成都創(chuàng)新互聯(lián)專注于蘭山企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站制作。蘭山網(wǎng)站建設(shè)公司,為蘭山等地區(qū)提供建站服務(wù)。全流程按需規(guī)劃網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

修飾模式(Decorator Pattern),又叫裝飾者模式,是面向?qū)ο缶幊填I(lǐng)域中,一種動態(tài)地往一個類中添加新的行為的設(shè)計模式。就功能而言,修飾模式相比生成子類更為靈活,這樣可以給某個對象而不是整個類添加一些功能。裝飾模式非常適用于靈活擴展對象的功能,下面是裝飾模式的UML圖:

PHP、Python和Javascript的裝飾器模式比較

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

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

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

//基類
abstract class Filter{
 abstract public function isForbid();
}
//基礎(chǔ)過濾類
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;
 }
}
//新過濾器,判斷是否重復(fù)發(fā)帖
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"){
 //判定是否重復(fù)發(fā)帖
 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中,不存在抽象類和方法,實現(xiàn)就更加簡單:

#!/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中,沒有嚴(yán)格的類,所有繼承都基于原型,理解起來會稍費功夫:

function MsgFilter(msg){
 this.content=msg;
 this.isForbid=function(){
 if(this.content.match(/http/g)){
 return [true,"Not Allowed Urls"];
 }else {
 return [false];
 }
 }
}
function Repeat(obj){
 var _obj=obj;
 this.isForbid=function(){
 if(_obj.isForbid[0] === true){
 return _obj.isForbid();
 }else if(_obj.content=='this is a test'){
 return [true,"Repeat Posts"];
 }else{
 return [false];
 }
 }
}
var test = new MsgFilter("his is a content have http urls");
console.log(test.isForbid());
var test2 = new Repeat(new MsgFilter("this is a test"));
console.log(test2.isForbid());

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

def Decorator(F):
  def newF(age):
    print "You Are Calling",F.__name__
    F(age)
  return newF
@Decorator
#通過@給函數(shù)showAge添加裝飾器Decorator
def showAge(age):
  print "hello , i am %d years old"%age
showAge(10)

裝飾模式的目的是解決動態(tài)擴展功能的難題,裝飾模式的本質(zhì)是對對象的靈活處理,理解裝飾模式,不僅能深入了解面向?qū)ο蟮某绦蛟O(shè)計,更能提高編程的思維能力。

到此,相信大家對“PHP、Python和Javascript的裝飾器模式比較”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁名稱:PHP、Python和Javascript的裝飾器模式比較-創(chuàng)新互聯(lián)
鏈接分享:http://www.2m8n56k.cn/article26/jejjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣網(wǎng)頁設(shè)計公司建站公司手機網(wǎng)站建設(shè)外貿(mào)建站服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司
主站蜘蛛池模板: 久久精品在线视频 | 精品热线九九精品视频 | 午夜香蕉成视频人网站高清版 | 精品久久久视频 | 久久香蕉国产视频 | 亚洲经典在线 | 中文字幕在线观看91 | 国产一区二区三区四区五区 | 亚洲人成影院午夜网站 | 久久国内精品自在自线软件 | 自拍偷自拍亚洲精品一区 | 色老头一区二区三区在线观看 | 成人午夜私人影院入口 | 黄网在线 | 国内精品1区1区3区4区 | 国产视频三区 | 国产亚洲欧美在线人成aaaa | 全黄性高视频 | 九九在线精品视频播放 | 国产真实乱子伦精品视 | 欧美成人免费tv在线播放 | 日韩精品中文字幕一区二区三区 | 97久久草草超级碰碰碰 | 精品中文字幕久久久久久 | japanese色系国产在线高清 | 欧美一级做一级爱a做片性 欧美一欧美一级毛片 | 亚洲国产天堂在线网址 | 午夜福利国产一级毛片 | 国产日韩欧美网站 | 免费黄色三级网站 | se视频在线观看 | 国产2区 | 日韩中文字幕网站 | 失禁h啪肉尿出来高h | 亚洲国产成人久久综合一 | 国产成人毛片亚洲精品不卡 | 欧美ab片| 高清偷自拍第1页 | 特级a毛片 | 99国产精品九九视频免费看 | 特黄特级a级黄毛片免费观看多人 |