日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

23种设计模式 UML 类图及对应示例代码 (二)

發布時間:2023/12/19 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 23种设计模式 UML 类图及对应示例代码 (二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
23種設計模式 UML 類圖及對應示例代碼 (二)

11.DoFactory.GangOfFour.Flyweight.Structural

?

?  Flyweight:運用共享技術有效的支持大量細粒度的對象。

???????享元模式:FLYWEIGHT在拳擊比賽中指最輕量級。享元模式以共享的方式高效的支持大量的細粒度對象。享元模式能做到共享的關鍵是區分內蘊狀態和外蘊狀態。內蘊狀態存儲在享元內部,不會隨環境的改變而有所不同。外蘊狀態是隨環境的改變而改變的。外蘊狀態不能影響內蘊狀態,它們是相互獨立的。將可以共享的狀態和不可以共享的狀態從常規類中區分開來,將不可以共享的狀態從類里剔除出去。客戶端不可以直接創建被共享的對象,而應當使用一個工廠對象負責創建被共享的對象。享元模式大幅度的降低內存中對象的數量。

?

?

Code
using?System;
using?System.Collections;

namespace?DoFactory.GangOfFour.Flyweight.Structural
{
????
///?<summary>
????
///?MainApp?startup?class?for?Structural?
????
///?Flyweight?Design?Pattern.
????
///?</summary>
????class?MainApp
????{
????????
///?<summary>
????????
///?Entry?point?into?console?application.
????????
///?</summary>
????????static?void?Main()
????????{
????????????
//?Arbitrary?extrinsic?state
????????????int?extrinsicstate?=?22;
????????
????????????FlyweightFactory?factory?
=?new?FlyweightFactory();

????????????
//?Work?with?different?flyweight?instances
????????????Flyweight?fx?=?factory.GetFlyweight("X");
????????????fx.Operation(
--extrinsicstate);

????????????Flyweight?fy?
=?factory.GetFlyweight("Y");
????????????fy.Operation(
--extrinsicstate);

????????????Flyweight?fz?
=?factory.GetFlyweight("Z");
????????????fz.Operation(
--extrinsicstate);

????????????UnsharedConcreteFlyweight?fu?
=?new?
????????????????UnsharedConcreteFlyweight();

????????????fu.Operation(
--extrinsicstate);

????????????
//?Wait?for?user
????????????Console.Read();
????????}
????}

????
//?"FlyweightFactory"?

????
class?FlyweightFactory?
????{
????????
private?Hashtable?flyweights?=?new?Hashtable();

????????
//?Constructor
????????public?FlyweightFactory()
????????{
????????????flyweights.Add(
"X",?new?ConcreteFlyweight());????????
????????????flyweights.Add(
"Y",?new?ConcreteFlyweight());
????????????flyweights.Add(
"Z",?new?ConcreteFlyweight());
????????}

????????
public?Flyweight?GetFlyweight(string?key)
????????{
????????????
return((Flyweight)flyweights[key]);?
????????}
????}

????
//?"Flyweight"?

????
abstract?class?Flyweight?
????{
????????
public?abstract?void?Operation(int?extrinsicstate);
????}

????
//?"ConcreteFlyweight"?

????
class?ConcreteFlyweight?:?Flyweight
????{
????????
public?override?void?Operation(int?extrinsicstate)
????????{
????????????Console.WriteLine(
"ConcreteFlyweight:?"?+?extrinsicstate);
????????}
????}

????
//?"UnsharedConcreteFlyweight"?

????
class?UnsharedConcreteFlyweight?:?Flyweight
????{
????????
public?override?void?Operation(int?extrinsicstate)
????????{
????????????Console.WriteLine(
"UnsharedConcreteFlyweight:?"?+?
????????????????extrinsicstate);
????????}
????}
}

?

12.DoFactory.GangOfFour.Interpreter.Structural

?

  Interpreter:給定一個語言,定義它的文法的一種表示,并定義一個解釋器用于解釋特定文法。

??????解釋器模式:給定一個語言后,解釋器模式可以定義出其文法的一種表示,并同時提供一個解釋器。客戶端可以使用這個解釋器來解釋這個語言中的句子。解釋器模式將描述怎樣在有了一個簡單的文法后,使用模式設計解釋這些語句。在解釋器模式里面提到的語言是指任何解釋器對象能夠解釋的任何組合。在解釋器模式中需要定義一個代表文法的命令類的等級結構,也就是一系列的組合規則。每一個命令對象都有一個解釋方法,代表對命令對象的解釋。命令對象的等級結構中的對象的任何排列組合都是一個語言。

?

?

Code
using?System;
using?System.Collections;

namespace?DoFactory.GangOfFour.Interpreter.Structural
{
????
///?<summary>
????
///?MainApp?startup?class?for?Structural?
????
///?Interpreter?Design?Pattern.
????
///?</summary>
????class?MainApp
????{
????????
///?<summary>
????????
///?Entry?point?into?console?application.
????????
///?</summary>
????????static?void?Main()
????????{
????????????Context?context?
=?new?Context();

????????????
//?Usually?a?tree?
????????????ArrayList?list?=?new?ArrayList();?

????????????
//?Populate?'abstract?syntax?tree'?
????????????list.Add(new?TerminalExpression());
????????????list.Add(
new?NonterminalExpression());
????????????list.Add(
new?TerminalExpression());
????????????list.Add(
new?TerminalExpression());

????????????
//?Interpret
????????????foreach?(AbstractExpression?exp?in?list)
????????????{
????????????????exp.Interpret(context);
????????????}

????????????
//?Wait?for?user
????????????Console.Read();
????????}
????}

????
//?"Context"?

????
class?Context?
????{
????}

????
//?"AbstractExpression"

????
abstract?class?AbstractExpression?
????{
????????
public?abstract?void?Interpret(Context?context);
????}

????
//?"TerminalExpression"?

????
class?TerminalExpression?:?AbstractExpression
????{
????????
public?override?void?Interpret(Context?context)????
????????{
????????????Console.WriteLine(
"Called?Terminal.Interpret()");
????????}
????}

????
//?"NonterminalExpression"?

????
class?NonterminalExpression?:?AbstractExpression
????{
????????
public?override?void?Interpret(Context?context)????
????????{
????????????Console.WriteLine(
"Called?Nonterminal.Interpret()");
????????}????
????}
}

?

13.DoFactory.GangOfFour.Iterator.Structural

?

  Iterator:提供一種方法順序訪問一個聚合對象中的各種元素,而無需暴露該對象的內部表示。

??????迭代子模式:迭代子模式可以順序訪問一個聚集中的元素而不必暴露聚集的內部表象。多個對象聚在一起形成的總體稱之為聚集,聚集對象是能夠包容一組對象的容器對象。迭代子模式將迭代邏輯封裝到一個獨立的子對象中,從而與聚集本身隔開。迭代子模式簡化了聚集的界面。每一個聚集對象都可以有一個或一個以上的迭代子對象,每一個迭代子的迭代狀態可以是彼此獨立的。迭代算法可以獨立于聚集角色變化。

?

?

Code
using?System;
using?System.Collections;

namespace?DoFactory.GangOfFour.Iterator.Structural
{
????
///?<summary>
????
///?MainApp?startup?class?for?Structural?
????
///?Iterator?Design?Pattern.
????
///?</summary>
????class?MainApp
????{
????????
///?<summary>
????????
///?Entry?point?into?console?application.
????????
///?</summary>
????????static?void?Main()
????????{
????????????ConcreteAggregate?a?
=?new?ConcreteAggregate();
????????????a[
0]?=?"Item?A";
????????????a[
1]?=?"Item?B";
????????????a[
2]?=?"Item?C";
????????????a[
3]?=?"Item?D";

????????????
//?Create?Iterator?and?provide?aggregate
????????????ConcreteIterator?i?=?new?ConcreteIterator(a);

????????????Console.WriteLine(
"Iterating?over?collection:");
????????????
????????????
object?item?=?i.First();
????????????
while?(item?!=?null)
????????????{
????????????????Console.WriteLine(item);
????????????????item?
=?i.Next();
????????????}?

????????????
//?Wait?for?user
????????????Console.Read();
????????}
????}

????
//?"Aggregate"?

????
abstract?class?Aggregate
????{
????????
public?abstract?Iterator?CreateIterator();
????}

????
//?"ConcreteAggregate"?

????
class?ConcreteAggregate?:?Aggregate
????{
????????
private?ArrayList?items?=?new?ArrayList();

????????
public?override?Iterator?CreateIterator()
????????{
????????????
return?new?ConcreteIterator(this);
????????}

????????
//?Property
????????public?int?Count
????????{
????????????
get{?return?items.Count;?}
????????}

????????
//?Indexer
????????public?object?this[int?index]
????????{
????????????
get{?return?items[index];?}
????????????
set{?items.Insert(index,?value);?}
????????}
????}

????
//?"Iterator"

????
abstract?class?Iterator
????{
????????
public?abstract?object?First();
????????
public?abstract?object?Next();
????????
public?abstract?bool?IsDone();
????????
public?abstract?object?CurrentItem();
????}

????
//?"ConcreteIterator"?

????
class?ConcreteIterator?:?Iterator
????{
????????
private?ConcreteAggregate?aggregate;
????????
private?int?current?=?0;

????????
//?Constructor
????????public?ConcreteIterator(ConcreteAggregate?aggregate)
????????{
????????????
this.aggregate?=?aggregate;
????????}

????????
public?override?object?First()
????????{
????????????
return?aggregate[0];
????????}

????????
public?override?object?Next()
????????{
????????????
object?ret?=?null;
????????????
if?(current?<?aggregate.Count?-?1)
????????????{
????????????????ret?
=?aggregate[++current];
????????????}
????????????
????????????
return?ret;
????????}

????????
public?override?object?CurrentItem()
????????{
????????????
return?aggregate[current];
????????}

????????
public?override?bool?IsDone()
????????{
????????????
return?current?>=?aggregate.Count???true?:?false?;
????????}
????}
}

?

14.DoFactory.GangOfFour.Mediator.Structural

?

  Mediator:用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式相互引用,從而使得耦合松散,可以獨立改變相互之間的交互。

??????調停者模式:調停者模式包裝了一系列對象相互作用的方式,使得這些對象不必相互明顯作用。從而使他們可以松散偶合。當某些對象之間的作用發生改變時,不會立即影響其他的一些對象之間的作用。保證這些作用可以彼此獨立的變化。調停者模式將多對多的相互作用轉化為一對多的相互作用。調停者模式將對象的行為和協作抽象化,把對象在小尺度的行為上與其他對象的相互作用分開處理。

?

?

Code
using?System;
using?System.Collections;

namespace?DoFactory.GangOfFour.Mediator.Structural
{
????
///?<summary>
????
///?MainApp?startup?class?for?Structural?
????
///?Mediator?Design?Pattern.
????
///?</summary>
????class?MainApp
????{
????????
///?<summary>
????????
///?Entry?point?into?console?application.
????????
///?</summary>
????????static?void?Main()
????????{
????????????ConcreteMediator?m?
=?new?ConcreteMediator();

????????????ConcreteColleague1?c1?
=?new?ConcreteColleague1(m);
????????????ConcreteColleague2?c2?
=?new?ConcreteColleague2(m);

????????????m.Colleague1?
=?c1;
????????????m.Colleague2?
=?c2;

????????????c1.Send(
"How?are?you?");
????????????c2.Send(
"Fine,?thanks");

????????????
//?Wait?for?user
????????????Console.Read();
????????}
????}

????
//?"Mediator"?

????
abstract?class?Mediator
????{
????????
public?abstract?void?Send(string?message,?
????????????Colleague?colleague);
????}

????
//?"ConcreteMediator"?

????
class?ConcreteMediator?:?Mediator
????{
????????
private?ConcreteColleague1?colleague1;
????????
private?ConcreteColleague2?colleague2;

????????
public?ConcreteColleague1?Colleague1
????????{
????????????
set{?colleague1?=?value;?}
????????}

????????
public?ConcreteColleague2?Colleague2
????????{
????????????
set{?colleague2?=?value;?}
????????}

????????
public?override?void?Send(string?message,?
????????????Colleague?colleague)
????????{
????????????
if?(colleague?==?colleague1)
????????????{
????????????????colleague2.Notify(message);
????????????}
????????????
else
????????????{
????????????????colleague1.Notify(message);
????????????}
????????}
????}

????
//?"Colleague"?

????
abstract?class?Colleague
????{
????????
protected?Mediator?mediator;

????????
//?Constructor
????????public?Colleague(Mediator?mediator)
????????{
????????????
this.mediator?=?mediator;
????????}
????}

????
//?"ConcreteColleague1"?

????
class?ConcreteColleague1?:?Colleague
????{
????????
//?Constructor
????????public?ConcreteColleague1(Mediator?mediator)?
????????????:?
base(mediator)?
????????{?
????????}

????????
public?void?Send(string?message)
????????{
????????????mediator.Send(message,?
this);
????????}

????????
public?void?Notify(string?message)
????????{
????????????Console.WriteLine(
"Colleague1?gets?message:?"?
????????????????
+?message);
????????}
????}

????
//?"ConcreteColleague2"?

????
class?ConcreteColleague2?:?Colleague
????{
????????
//?Constructor
????????public?ConcreteColleague2(Mediator?mediator)?
????????????:?
base(mediator)?
????????{?
????????}
??
????????
public?void?Send(string?message)
????????{
????????????mediator.Send(message,?
this);
????????}

????????
public?void?Notify(string?message)
????????{
????????????Console.WriteLine(
"Colleague2?gets?message:?"?
????????????????
+?message);
????????}
????}
}

?

15.DoFactory.GangOfFour.Memento.Structural

?

  Memento:不破壞封裝的前提下,捕獲對象的內部狀態,并在該對象之外保存這個狀態。

???????? 備忘錄模式:備忘錄對象是一個用來存儲另外一個對象內部狀態的快照的對象。備忘錄模式的用意是在不破壞封裝的條件下,將一個對象的狀態捉住,并外部化,存儲起來,從而可以在將來合適的時候把這個對象還原到存儲起來的狀態。

?

?

Code
using?System;

namespace?DoFactory.GangOfFour.Memento.Structural
{
????
///?<summary>
????
///?MainApp?startup?class?for?Structural?
????
///?Memento?Design?Pattern.
????
///?</summary>
????class?MainApp
????{
????????
///?<summary>
????????
///?Entry?point?into?console?application.
????????
///?</summary>
????????static?void?Main()
????????{
????????????Originator?o?
=?new?Originator();
????????????o.State?
=?"On";

????????????
//?Store?internal?state
????????????Caretaker?c?=?new?Caretaker();
????????????c.Memento?
=?o.CreateMemento();

????????????
//?Continue?changing?originator
????????????o.State?=?"Off";

????????????
//?Restore?saved?state
????????????o.SetMemento(c.Memento);

????????????
//?Wait?for?user
????????????Console.Read();
????????}
????}

????
//?"Originator"?

????
class?Originator
????{
????????
private?string?state;

????????
//?Property
????????public?string?State
????????{
????????????
get{?return?state;?}
????????????
set
????????????{?
????????????????state?
=?value;?
????????????????Console.WriteLine(
"State?=?"?+?state);
????????????}
????????}

????????
public?Memento?CreateMemento()
????????{
????????????
return?(new?Memento(state));
????????}

????????
public?void?SetMemento(Memento?memento)
????????{
????????????Console.WriteLine(
"Restoring?state");
????????????State?
=?memento.State;
????????}
????}

????
//?"Memento"

????
class?Memento
????{
????????
private?string?state;

????????
//?Constructor
????????public?Memento(string?state)
????????{
????????????
this.state?=?state;
????????}

????????
//?Property
????????public?string?State
????????{
????????????
get{?return?state;?}
????????}
????}

????
//?"Caretaker"?

????
class?Caretaker
????{
????????
private?Memento?memento;

????????
//?Property
????????public?Memento?Memento
????????{
????????????
set{?memento?=?value;?}
????????????
get{?return?memento;?}
????????}
????}
}

?

16.DoFactory.GangOfFour.Observer.Structural

?

  Observer:定義對象間的一種一對多的依賴關系,以便當一個對象的狀態發生變化時依賴于它的所有的對象都得到通知和刷新。

??????觀察者模式:觀察者模式定義了一種一隊多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態上發生變化時,會通知所有觀察者對象,使他們能夠自動更新自己。

?

?

Code
using?System;
using?System.Collections;

namespace?DoFactory.GangOfFour.Observer.Structural
{
????
///?<summary>
????
///?MainApp?startup?class?for?Structural?
????
///?Observer?Design?Pattern.
????
///?</summary>
????class?MainApp
????{
????????
///?<summary>
????????
///?Entry?point?into?console?application.
????????
///?</summary>
????????static?void?Main()
????????{
????????????
//?Configure?Observer?pattern
????????????ConcreteSubject?s?=?new?ConcreteSubject();

????????????s.Attach(
new?ConcreteObserver(s,"X"));
????????????s.Attach(
new?ConcreteObserver(s,"Y"));
????????????s.Attach(
new?ConcreteObserver(s,"Z"));

????????????
//?Change?subject?and?notify?observers
????????????s.SubjectState?=?"ABC";
????????????s.Notify();

????????????
//?Wait?for?user
????????????Console.Read();
????????}
????}

????
//?"Subject"?

????
abstract?class?Subject
????{
????????
private?ArrayList?observers?=?new?ArrayList();

????????
public?void?Attach(Observer?observer)
????????{
????????????observers.Add(observer);
????????}

????????
public?void?Detach(Observer?observer)
????????{
????????????observers.Remove(observer);
????????}

????????
public?void?Notify()
????????{
????????????
foreach?(Observer?o?in?observers)
????????????{
????????????????o.Update();
????????????}
????????}
????}

????
//?"ConcreteSubject"?

????
class?ConcreteSubject?:?Subject
????{
????????
private?string?subjectState;

????????
//?Property
????????public?string?SubjectState
????????{
????????????
get{?return?subjectState;?}
????????????
set{?subjectState?=?value;?}
????????}
????}

????
//?"Observer"?

????
abstract?class?Observer
????{
????????
public?abstract?void?Update();
????}

????
//?"ConcreteObserver"?

????
class?ConcreteObserver?:?Observer
????{
????????
private?string?name;
????????
private?string?observerState;
????????
private?ConcreteSubject?subject;

????????
//?Constructor
????????public?ConcreteObserver(
????????????ConcreteSubject?subject,?
string?name)
????????{
????????????
this.subject?=?subject;
????????????
this.name?=?name;
????????}

????????
public?override?void?Update()
????????{
????????????observerState?
=?subject.SubjectState;
????????????Console.WriteLine(
"Observer?{0}'s?new?state?is?{1}",
????????????????name,?observerState);
????????}

????????
//?Property
????????public?ConcreteSubject?Subject
????????{
????????????
get?{?return?subject;?}
????????????
set?{?subject?=?value;?}
????????}
????}
}

17.DoFactory.GangOfFour.Prototype.Structural

?

?  Prototype:用原型實例指定創建對象的種類,并且通過拷貝這個原型來創建新的對象。

???????原始模型模式:通過給出一個原型對象來指明所要創建的對象的類型,然后用復制這個原型對象的方法創建出更多同類型的對象。原始模型模式允許動態的增加或減少產品類,產品類不需要非得有任何事先確定的等級結構,原始模型模式適用于任何的等級結構。缺點是每一個類都必須配備一個克隆方法。

?

?

Code
using?System;

namespace?DoFactory.GangOfFour.Prototype.Structural
{
????
///?<summary>
????
///?MainApp?startup?class?for?Structural
????
///?Prototype?Design?Pattern.
????
///?</summary>
????class?MainApp
????{
????????
///?<summary>
????????
///?Entry?point?into?console?application.
????????
///?</summary>
????????static?void?Main()
????????{
????????????
//?Create?two?instances?and?clone?each

????????????ConcretePrototype1?p1?
=?new?ConcretePrototype1("I");
????????????ConcretePrototype1?c1?
=?(ConcretePrototype1)p1.Clone();
????????????Console.WriteLine?(
"Cloned:?{0}",?c1.Id);

????????????ConcretePrototype2?p2?
=?new?ConcretePrototype2("II");
????????????ConcretePrototype2?c2?
=?(ConcretePrototype2)p2.Clone();
????????????Console.WriteLine?(
"Cloned:?{0}",?c2.Id);

????????????
//?Wait?for?user
????????????Console.Read();
????????}
????}

????
//?"Prototype"?

????
abstract?class?Prototype
????{
????????
private?string?id;

????????
//?Constructor
????????public?Prototype(string?id)
????????{
????????????
this.id?=?id;
????????}

????????
//?Property
????????public?string?Id
????????{
????????????
get{?return?id;?}
????????}

????????
public?abstract?Prototype?Clone();
????}

????
//?"ConcretePrototype1"

????
class?ConcretePrototype1?:?Prototype
????{
????????
//?Constructor
????????public?ConcretePrototype1(string?id)?:?base(id)?
????????{
????????}

????????
public?override?Prototype?Clone()
????????{
????????????
//?Shallow?copy
????????????return?(Prototype)this.MemberwiseClone();
????????}
????}

????
//?"ConcretePrototype2"

????
class?ConcretePrototype2?:?Prototype
????{
????????
//?Constructor
????????public?ConcretePrototype2(string?id)?:?base(id)?
????????{
????????}

????????
public?override?Prototype?Clone()
????????{
????????????
//?Shallow?copy
????????????return?(Prototype)this.MemberwiseClone();
????????}
????}
}

18.DoFactory.GangOfFour.Proxy.Structural

?

  Proxy:為其他對象提供一個代理以控制對這個對象的訪問。

????? 代理模式:代理模式給某一個對象提供一個代理對象,并由代理對象控制對源對象的引用。代理就是一個人或一個機構代表另一個人或者一個機構采取行動。某些情況下,客戶不想或者不能夠直接引用一個對象,代理對象可以在客戶和目標對象直接起到中介的作用。客戶端分辨不出代理主題對象與真實主題對象。代理模式可以并不知道真正的被代理對象,而僅僅持有一個被代理對象的接口,這時候代理對象不能夠創建被代理對象,被代理對象必須有系統的其他角色代為創建并傳入。

?

?

Code
using?System;

namespace?DoFactory.GangOfFour.Proxy.Structural
{
????
///?<summary>
????
///?MainApp?startup?class?for?Structural
????
///?Proxy?Design?Pattern.
????
///?</summary>
????class?MainApp
????{
????????
///?<summary>
????????
///?Entry?point?into?console?application.
????????
///?</summary>
????????static?void?Main()
????????{
????????????
//?Create?proxy?and?request?a?service
????????????Proxy?proxy?=?new?Proxy();
????????????proxy.Request();

????????????
//?Wait?for?user
????????????Console.Read();
????????}
????}

????
//?"Subject"?

????
abstract?class?Subject?
????{
????????
public?abstract?void?Request();????????
????}

????
//?"RealSubject"?

????
class?RealSubject?:?Subject
????{
????????
public?override?void?Request()
????????{
????????????Console.WriteLine(
"Called?RealSubject.Request()");
????????}
????}

????
//?"Proxy"?

????
class?Proxy?:?Subject
????{
????????RealSubject?realSubject;

????????
public?override?void?Request()
????????{
????????????
//?Use?'lazy?initialization'
????????????if?(realSubject?==?null)
????????????{
????????????????realSubject?
=?new?RealSubject();
????????????}

????????????realSubject.Request();
????????}????
????}
}

?

19.DoFactory.GangOfFour.Singleton.Structural

?

?  Singleton:保證一個類僅有一個實例,并提供一個訪問它的全局點。

???????單例模式:單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統提供這個實例單例模式。單例模式只應在有真正的“單一實例”的需求時才可使用。

?

Code
using?System;

namespace?DoFactory.GangOfFour.Singleton.Structural
{
????
///?<summary>
????
///?MainApp?startup?class?for?Structural
????
///?Singleton?Design?Pattern.
????
///?</summary>
????class?MainApp
????{
????????
///?<summary>
????????
///?Entry?point?into?console?application.
????????
///?</summary>
????????static?void?Main()
????????{
????????????
//?Constructor?is?protected?--?cannot?use?new
????????????Singleton?s1?=?Singleton.Instance();
????????????Singleton?s2?
=?Singleton.Instance();

????????????
if?(s1?==?s2)
????????????{
????????????????Console.WriteLine(
"Objects?are?the?same?instance");
????????????}

????????????
//?Wait?for?user
????????????Console.Read();
????????}
????}

????
//?"Singleton"

????
class?Singleton
????{
????????
private?static?Singleton?instance;

????????
//?Note:?Constructor?is?'protected'
????????protected?Singleton()?
????????{
????????}

????????
public?static?Singleton?Instance()
????????{
????????????
//?Uses?lazy?initialization
????????????if?(instance?==?null)
????????????{
????????????????instance?
=?new?Singleton();
????????????}

????????????
return?instance;
????????}
????}
}

?

20.DoFactory.GangOfFour.State.Structural

?

  State:允許一個對象再內部狀態改變的時候改變它的行為。對象看起來似乎修改了所屬的類。

???????? 狀態模式:狀態模式允許一個對象在其內部狀態改變的時候改變行為。這個對象看上去象是改變了它的類一樣。狀態模式把所研究的對象的行為包裝在不同的狀態對象里,每一個狀態對象都屬于一個抽象狀態類的一個子類。狀態模式的意圖是讓一個對象在其內部狀態改變的時候,其行為也隨之改變。狀態模式需要對每一個系統可能取得的狀態創立一個狀態類的子類。當系統的狀態變化時,系統便改變所選的子類。

?

Code
using?System;

namespace?DoFactory.GangOfFour.State.Structural
{
????
///?<summary>
????
///?MainApp?startup?class?for?Structural
????
///?State?Design?Pattern.
????
///?</summary>
????class?MainApp
????{
????????
///?<summary>
????????
///?Entry?point?into?console?application.
????????
///?</summary>
????????static?void?Main()
????????{
????????????
//?Setup?context?in?a?state
????????????Context?c?=?new?Context(new?ConcreteStateA());

????????????
//?Issue?requests,?which?toggles?state
????????????c.Request();
????????????c.Request();
????????????c.Request();
????????????c.Request();

????????????
//?Wait?for?user
????????????Console.Read();
????????}
????}

????
//?"State"?

????
abstract?class?State
????{
????????
public?abstract?void?Handle(Context?context);
????}

????
//?"ConcreteStateA"

????
class?ConcreteStateA?:?State
????{
????????
public?override?void?Handle(Context?context)
????????{
????????????context.State?
=?new?ConcreteStateB();
????????}
????}

????
//?"ConcreteStateB"?

????
class?ConcreteStateB?:?State
????{
????????
public?override?void?Handle(Context?context)
????????{
????????????context.State?
=?new?ConcreteStateA();
????????}
????}

????
//?"Context"?

????
class?Context
????{
????????
private?State?state;

????????
//?Constructor
????????public?Context(State?state)
????????{
????????????
this.State?=?state;
????????}

????????
//?Property
????????public?State?State
????????{
????????????
get{?return?state;?}
????????????
set
????????????{?
????????????????state?
=?value;?
????????????????Console.WriteLine(
"State:?"?+?
????????????????????state.GetType().Name);
????????????}
????????}

????????
public?void?Request()
????????{
????????????state.Handle(
this);
????????}
????}
}


?

設計原則及分類介紹:

http://www.cnblogs.com/furenjun/archive/2010/03/01/designPatterns.html

posted on 2008-12-28 03:17 DotNet編程 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/furenjun/archive/2008/12/28/DesignPatterns2.html

總結

以上是生活随笔為你收集整理的23种设计模式 UML 类图及对应示例代码 (二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美伦理一区二区 | 美女被艹视频网站 | 美女国产网站 | 高清日韩 | 成人久色 | 日本aaa级片 | 影音先锋激情在线 | 久草小说 | www国产免费| 超碰黑丝 | 精品少妇无码av无码专区 | 久久最新精品 | 亚洲欧美日韩精品久久 | 波多野结衣91 | 九九热这里只有 | 亚洲第一精品在线 | 黄色av免费网站 | 久久久高清免费视频 | 日日夜夜综合网 | 久久er99热精品一区二区介绍 | 黑人av | 色婷婷视频在线 | 国产精品欧美在线 | 黄色福利网 | 国产高潮又爽又无遮挡又免费 | 久久久久久综合网 | av色在线观看 | 欧美少妇xx | 亚洲国产综合一区 | 亚洲免费一区 | 亚洲精品国产精品乱码不卡√香蕉 | 日韩精品视频在线观看免费 | 蜜桃视频在线播放 | 午夜天堂精品久久久久 | 中文字幕123区| 亚洲精品一区二区三区影院忠贞 | 伊人伊人网 | 97人妻精品一区二区三区免费 | 亚洲精品入口 | 俺来也俺也啪www色 欧洲一区二区视频 | 黄色三级生活片 | 97精品国产97久久久久久免费 | 在线免费观看一区二区三区 | 欧美又粗又大xxxxbbbb疯狂 | 男女作爱网站 | 综合网五月天 | 国产不卡精品视频 | 日本一区免费视频 | 99久久免费看精品国产一区 | 国产欧美精品一区二区色综合朱莉 | 激情视频免费在线观看 | av福利影院| 人妻久久久一区二区三区 | 国产一久久| 黄色三级视频网站 | 国产在线观看网站 | 热九九精品 | 九九在线观看高清免费 | 91av免费观看| 风流僵尸艳片a级 | a级片在线 | 久久精品第一页 | 亚洲美女福利 | 日韩网红少妇无码视频香港 | 91九色国产ts另类人妖 | 国产有码 | 婷婷九九 | 国产美女自拍视频 | 麻豆影视免费观看 | 国产美女福利 | 日韩av影视大全 | 超碰人人cao| 精品欧美一区二区三区在线观看 | 无码人中文字幕 | 国产一区二区免费在线观看 | 亚洲五月综合 | 国产精品视频入口 | 国产剧情精品 | 夜夜操夜夜摸 | 在线观看亚洲一区二区 | 中文字幕第一页亚洲 | 免费精品一区二区 | 久久99影院| 午夜视频在线观看免费视频 | 91丝袜一区在线观看 | 国产无套内射普通话对白 | 网站一级片 | 大屁股一区二区三区 | 一区免费在线观看 | 国产日韩视频在线 | 中文字幕亚洲乱码熟女一区二区 | 国产精品一区无码 | 自拍亚洲综合 | 特黄特色大片免费播放器使用方法 | 在线观看一级片 | 久久久久久久久久影院 | 欧产日产国产精品 | 久久久91视频 | 毛片在线免费观看视频 |