模式設計c#--結構型--proxy
| 名稱 | Proxy |
| 結構 |
|
| 意圖 | 為其他對象提供一種代理以控制對這個對象的訪問。 |
| 適用性 |
|
Code Example
namespace?Proxy_DesignPattern

{
????using?System;
????using?System.Threading;

????/**////?<summary>
????///????Summary?description?for?Client.
????///?</summary>
????abstract?class?CommonSubject?
????
{
????????abstract?public?void?Request();????????
????}
????class?ActualSubject?:?CommonSubject
????
{
????????public?ActualSubject()
????????
{
????????????//?Assume?constructor?here?does?some?operation?that?takes?quite?a
????????????//?while?-?hence?the?need?for?a?proxy?-?to?delay?incurring?this?
????????????//?delay?until?(and?if)?the?actual?subject?is?needed
????????????Console.WriteLine("Starting?to?construct?ActualSubject");????????
????????????Thread.Sleep(1000);?//?represents?lots?of?processing!?
????????????Console.WriteLine("Finished?constructing?ActualSubject");
????????}
????????????
????????????override?public?void?Request()
????????
{
????????????Console.WriteLine("Executing?request?in?ActualSubject");
????????}
????}
????class?Proxy?:?CommonSubject
????
{
????????ActualSubject?actualSubject;
????????override?public?void?Request()
????????
{
????????????if?(actualSubject?==?null)
????????????????actualSubject?=?new?ActualSubject();
????????????actualSubject.Request();
????????}????
????????
????}
????
????public?class?Client
????
{
????????public?static?int?Main(string[]?args)
????????
{
????????????Proxy?p?=?new?Proxy();
????????????//?Perform?actions?here
????????????//?.?.?.?
????????????if?(1==1)????????//?at?some?later?point,?based?on?a?condition,?
????????????????p.Request();//?we?determine?if?we?need?to?use?subject
????????????????????????????????
????????????return?0;
????????}
????}
}
//?Proxy?pattern?--?Real?World?example??

using?System;
namespace?DoFactory.GangOfFour.Proxy.RealWorld

{
??
??//?Mainapp?test?application?
??class?MainApp
??
{
????static?void?Main()
????
{
??????//?Create?math?proxy?
??????MathProxy?p?=?new?MathProxy();
??????//?Do?the?math?
??????Console.WriteLine("4?+?2?=?"?+?p.Add(4,?2));
??????Console.WriteLine("4?-?2?=?"?+?p.Sub(4,?2));
??????Console.WriteLine("4?*?2?=?"?+?p.Mul(4,?2));
??????Console.WriteLine("4?/?2?=?"?+?p.Div(4,?2));
??????//?Wait?for?user?
??????Console.Read();
????}
??}
??//?"Subject"?
??public?interface?IMath
??
{
????double?Add(double?x,?double?y);
????double?Sub(double?x,?double?y);
????double?Mul(double?x,?double?y);
????double?Div(double?x,?double?y);
??}
??//?"RealSubject"?
??class?Math?:?IMath
??
{
????public?double?Add(double?x,?double?y)
{return?x?+?y;}
????public?double?Sub(double?x,?double?y)
{return?x?-?y;}
????public?double?Mul(double?x,?double?y)
{return?x?*?y;}
????public?double?Div(double?x,?double?y)
{return?x?/?y;}
??}
??//?"Proxy?Object"?
??class?MathProxy?:?IMath
??
{
????Math?math;
????public?MathProxy()
????
{
??????math?=?new?Math();
????}
????public?double?Add(double?x,?double?y)
????
{?
??????return?math.Add(x,y);?
????}
????public?double?Sub(double?x,?double?y)
????
{?
??????return?math.Sub(x,y);?
????}
????public?double?Mul(double?x,?double?y)
????
{?
??????return?math.Mul(x,y);?
????}
????public?double?Div(double?x,?double?y)
????
{?
??????return?math.Div(x,y);?
????}
??}
}
?
posted on 2006-01-03 15:51 夢在天涯 閱讀(949) 評論(2) 編輯 收藏 引用 所屬分類: Design pattern

