享元模式可以避免大量非常相似類的開銷。在程式設計中,有時需要生成大量細粒度的類例項來表示資料。如果能發現這些例項除了幾個引數外基本上都是相同的,有時就能夠大幅度地減少需要例項化的類的數量。如果能把那些引數移到類例項的外面,在方法呼叫時將他們傳遞進來,就可以通過共享大幅度地減少單個例項的數目。
//所有具體享元類的超類或介面,通過這個介面,flyweight可以接受並作用於外部狀態
abstract class flyweight
//繼承flyweight超類或實現flyweight介面,並為內部狀態增加記憶體空間。
class concreteflyweight extends flyweight
}//不需要共享的flyweight子類。因為flyweight介面共享成為可能,但它並不強制共享
class unsharedconcreteflyweight extends flyweight
}//享元工廠,用來建立並管理flyweight物件。它主要是用來確保合理地共享flyweight,當使用者請求乙個flyweight時,flyweightfactory物件提供乙個已建立的例項或者建立乙個(如果不存在的話)
class flyweightfactory
public function getflyweight($key)
}//**外部狀態
//使用者
class user
public function __get($key)
public function __set($key, $value)
}//**抽象類
abstract class website
//具體**類
class concretewebsite extends website
//實現『myuse』方法
public function myuse(user $user)
}//**工廠類
class websitefactory
return $this->flyweights[$key];
} //獲得**分類總數
public function getwebsitecount()
}$f = new websitefactory();
$fx = $f->getwebsitecategory('產品展示');
$fx->myuse(new user('小菜'));
$fy = $f->getwebsitecategory('產品展示');
$fy->myuse(new user('大鳥'));
$fz = $f->getwebsitecategory('產品展示');
$fz->myuse(new user('嬌嬌'));
$fl = $f->getwebsitecategory('部落格');
$fl->myuse(new user('老頑童'));
$fm = $f->getwebsitecategory('部落格');
$fm->myuse(new user('桃谷六仙'));
$fn = $f->getwebsitecategory('部落格');
$fn->myuse(new user('南海鱷神'));
echo '得到**分類總數為'.$f->getwebsitecount();
《大話設計模式 享元模式》筆記
1 享元模式 flyweight 運用共享技術有效的支援大量細顆粒度的物件。2 享元模式結構圖 3 簡單 實現 flyweight類,它是所有享元類的超類或介面,通過這個介面,flyweight可以接受並作用於外部狀態。public abstract class flyweightconcretef...
java 享元模式(大話設計模式)
所有具體享元類的超類,接受並作用於外部狀態 author administrator public abstract class flyweight class concreteflyweight extends flyweight class unsharedconcreteflyweight e...
大話設計模式之享元模式
享元模式 運用共享技術有效地支援大量細粒度的物件。內部狀態與外部狀態 享元模式可以避免大量非常相類似類的開銷。在程式設計中,有時需要生成大量細粒度的類例項來表示資料。如果能發現這些例項除了幾個引數外基本都是相同的,有時就能夠受大幅度地減少需要例項化數量的類的數量。如果能把那些引數轉移到類例項的外面,...