中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

佛山外貿(mào)網(wǎng)站建設(shè)方案友鏈交易交易平臺

佛山外貿(mào)網(wǎng)站建設(shè)方案,友鏈交易交易平臺,哪些網(wǎng)站會盜取,有沒有做婚車的網(wǎng)站引言 設(shè)計模式是軟件工程中用于解決常見問題的可復(fù)用解決方案。在C#編程中,常見的設(shè)計模式具有廣泛的應(yīng)用。本篇博客將重點介紹C#中常見的結(jié)構(gòu)型設(shè)計模式,包括適配器模式、裝飾器模式、代理模式、組合模式和享元模式。 目錄 引言1. 適配器模式(Adapter …

引言

設(shè)計模式是軟件工程中用于解決常見問題的可復(fù)用解決方案。在C#編程中,常見的設(shè)計模式具有廣泛的應(yīng)用。本篇博客將重點介紹C#中常見的結(jié)構(gòu)型設(shè)計模式,包括適配器模式、裝飾器模式、代理模式、組合模式和享元模式。
在這里插入圖片描述


目錄

    • 引言
    • 1. 適配器模式(Adapter Pattern)
      • 示例代碼
      • 解釋
    • 2. 橋接模式(Bridge Pattern)
      • 示例代碼
      • 解釋
    • 3. 外觀模式(Facade)
      • 示例代碼
      • 解釋
    • 4. 裝飾器模式(Decorator Pattern)
      • 示例代碼
      • 解釋
    • 5. 代理模式(Proxy Pattern)
      • 示例代碼
      • 解釋
    • 6. 組合模式(Composite Pattern)
      • 示例代碼
      • 解釋
    • 7. 享元模式(Flyweight Pattern)
      • 示例代碼
      • 解釋
    • 結(jié)論


1. 適配器模式(Adapter Pattern)

適配器模式用于將一個類的接口轉(zhuǎn)換成客戶端所期望的另一個接口。這種模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

示例代碼

// 目標(biāo)接口
interface ITarget
{void Request();
}// 需要被適配的類
class Adaptee
{public void SpecificRequest(){Console.WriteLine("Adaptee's SpecificRequest");}
}// 適配器類
class Adapter : ITarget
{private Adaptee _adaptee;public Adapter(Adaptee adaptee){_adaptee = adaptee;}public void Request(){_adaptee.SpecificRequest();}
}// 客戶端代碼
class Client
{static void Main(string[] args){Adaptee adaptee = new Adaptee();ITarget target = new Adapter(adaptee);target.Request();}
}

解釋

適配器模式中的目標(biāo)接口(ITarget)定義了客戶端所期望的方法。Adaptee類是需要被適配的類,其中包含了一個SpecificRequest方法。Adapter類則是適配器,持有一個Adaptee對象的引用,并實現(xiàn)了ITarget接口。在AdapterRequest方法中,調(diào)用了AdapteeSpecificRequest方法。在客戶端代碼中,創(chuàng)建了一個Adaptee對象和一個Adapter對象,然后通過Adapter對象去調(diào)用Request方法。

2. 橋接模式(Bridge Pattern)

橋接模式是一種結(jié)構(gòu)型設(shè)計模式,用于將抽象與實現(xiàn)隔離開來,使它們能夠獨立變化。它通過組合的方式代替繼承,從而降低了系統(tǒng)的耦合性。該模式適合在需要多個維度進行擴展時使用,例如在圖形界面庫中,將窗口與不同操作系統(tǒng)的窗口裝飾風(fēng)格進行分離。橋接模式的核心思想是將抽象部分與實現(xiàn)部分分離,使它們可以獨立地變化和演化。

示例代碼

// 實現(xiàn)部分接口
interface Implementor {void operationImpl();
}// 具體實現(xiàn)類A
class ConcreteImplementorA implements Implementor {@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorA operation implementation");}
}// 具體實現(xiàn)類B
class ConcreteImplementorB implements Implementor {@Overridepublic void operationImpl() {System.out.println("ConcreteImplementorB operation implementation");}
}// 抽象部分
abstract class Abstraction {protected Implementor implementor;public void setImplementor(Implementor implementor) {this.implementor = implementor;}public abstract void operation();
}// 擴展抽象部分的具體類
class RefinedAbstraction extends Abstraction {@Overridepublic void operation() {implementor.operationImpl();}
}// 使用示例
public class BridgePatternExample {public static void main(String[] args) {Implementor implementorA = new ConcreteImplementorA();Implementor implementorB = new ConcreteImplementorB();Abstraction abstraction = new RefinedAbstraction();abstraction.setImplementor(implementorA);abstraction.operation();abstraction.setImplementor(implementorB);abstraction.operation();}
}

解釋

在上述示例中,?Implementor? 接口定義了實現(xiàn)部分的操作方法。?ConcreteImplementorA? 和ConcreteImplementorB? 是具體的實現(xiàn)類。?Abstraction? 是抽象部分的定義,其中包含一個實現(xiàn)部分的通用接口,并有一個抽象方法 ?operation()? 來定義具體的操作。?RefinedAbstraction? 是具體的擴展抽象類,實現(xiàn)了抽象方法并通過組合關(guān)聯(lián)了具體的實現(xiàn)類。

3. 外觀模式(Facade)

外觀模式是一種結(jié)構(gòu)型設(shè)計模式,提供了一個統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口。外觀模式定義了一個高層接口,讓子系統(tǒng)更容易使用。。

示例代碼

// 子系統(tǒng)A
class SubsystemA {public void operationA() {System.out.println("SubsystemA operation");}
}// 子系統(tǒng)B
class SubsystemB {public void operationB() {System.out.println("SubsystemB operation");}
}// 子系統(tǒng)C
class SubsystemC {public void operationC() {System.out.println("SubsystemC operation");}
}// 外觀類
class Facade {private SubsystemA subsystemA;private SubsystemB subsystemB;private SubsystemC subsystemC;public Facade() {subsystemA = new SubsystemA();subsystemB = new SubsystemB();subsystemC = new SubsystemC();}public void operation() {subsystemA.operationA();subsystemB.operationB();subsystemC.operationC();}
}// 使用示例
public class FacadePatternExample {public static void main(String[] args) {Facade facade = new Facade();facade.operation();}
}

解釋

在上述示例中,?SubsystemA?、?SubsystemB? 和 ?SubsystemC? 是不同的子系統(tǒng),它們分別提供了不同的操作。?Facade? 是外觀類,隱藏了子系統(tǒng)的復(fù)雜性,為客戶端提供了一個簡單的接口。在外觀類的操作方法中,調(diào)用了多個子系統(tǒng)的操作。

4. 裝飾器模式(Decorator Pattern)

裝飾器模式允許向一個現(xiàn)有對象添加新功能,同時又不改變其結(jié)構(gòu)。它是通過創(chuàng)建一個包裝對象來包裹真實對象,從而對真實對象進行功能的擴展。

示例代碼

// 抽象組件接口
interface IComponent
{void Operation();
}// 具體組件類
class ConcreteComponent : IComponent
{public void Operation(){Console.WriteLine("ConcreteComponent's Operation");}
}// 抽象裝飾者類
abstract class Decorator : IComponent
{protected IComponent _component;public Decorator(IComponent component){_component = component;}public virtual void Operation(){_component.Operation();}
}// 具體裝飾者類
class ConcreteDecoratorA : Decorator
{public ConcreteDecoratorA(IComponent component): base(component){}public override void Operation(){base.Operation();AddedBehavior();}private void AddedBehavior(){Console.WriteLine("ConcreteDecoratorA's AddedBehavior");}
}class ConcreteDecoratorB : Decorator
{public ConcreteDecoratorB(IComponent component): base(component){}public override void Operation(){base.Operation();AddedBehavior();}private void AddedBehavior(){Console.WriteLine("ConcreteDecoratorB's AddedBehavior");}
}// 客戶端代碼
class Client
{static void Main(string[] args){IComponent component = new ConcreteComponent();component = new ConcreteDecoratorA(component);component = new ConcreteDecoratorB(component);component.Operation();}
}

解釋

裝飾器模式中的抽象組件接口(IComponent)定義了被裝飾者和裝飾者之間的公共方法。ConcreteComponent類是具體的組件類,實現(xiàn)了IComponent接口的Operation方法。Decorator類是抽象裝飾者類,持有一個IComponent對象的引用,并實現(xiàn)了IComponent接口。ConcreteDecoratorAConcreteDecoratorB類分別是具體裝飾者類,它們繼承自Decorator類,并在調(diào)用父類Operation方法的同時添加了額外的行為。

在客戶端代碼中,首先創(chuàng)建了一個ConcreteComponent對象,然后通過多次進行裝飾,分別使用ConcreteDecoratorAConcreteDecoratorB對其進行包裝。最后調(diào)用component.Operation()方法時,實際上會調(diào)用被裝飾者的Operation方法,并在其基礎(chǔ)上添加了額外的行為。

5. 代理模式(Proxy Pattern)

代理模式為其他對象提供一種代理以控制對這個對象的訪問。代理模式主要通過代理類來封裝目標(biāo)對象,控制客戶端對目標(biāo)對象的訪問,并在必要的時候進行一些預(yù)處理或后處理操作。

示例代碼

// 被代理接口
interface ISubject
{void Request();
}// 真實對象類
class RealSubject : ISubject
{public void Request(){Console.WriteLine("RealSubject's Request");}
}// 代理類
class Proxy : ISubject
{private RealSubject _realSubject;public void Request(){if (_realSubject == null){_realSubject = new RealSubject();}PreProcess();_realSubject.Request();PostProcess();}private void PreProcess(){Console.WriteLine("Proxy's PreProcess");}private void PostProcess(){Console.WriteLine("Proxy's PostProcess");}
}// 客戶端代碼
class Client
{static void Main(string[] args){ISubject proxy = new Proxy();proxy.Request();}
}

解釋

代理模式中的被代理接口(ISubject)定義了代理對象和真實對象的公共方法。RealSubject類是真實對象類,實現(xiàn)了被代理接口的Request方法。Proxy類是代理類,持有一個RealSubject對象的引用,并實現(xiàn)了被代理接口的Request方法。在Proxy類的Request方法中,進行了預(yù)處理、調(diào)用真實對象的Request方法和后處理。

在客戶端代碼中,創(chuàng)建了一個代理對象Proxy,然后通過該對象調(diào)用Request方法。在調(diào)用過程中,會對真實對象進行實例化,并在方法執(zhí)行前后進行相應(yīng)的預(yù)處理和后處理。

6. 組合模式(Composite Pattern)

組合模式將對象組合成樹形結(jié)構(gòu)以表示"部分-整體"的層次結(jié)構(gòu)。組合模式使得客戶端對單個對象和組合對象的使用具有一致性。

示例代碼

// 抽象組件類
abstract class Component
{protected string _name;public Component(string name){_name = name;}public abstract void Display();
}// 葉子節(jié)點類
class Leaf : Component
{public Leaf(string name): base(name){}public override void Display(){Console.WriteLine(_name);}
}// 容器節(jié)點類
class Composite : Component
{private List<Component> _children = new List<Component>();public Composite(string name): base(name){}public void Add(Component component){_children.Add(component);}public void Remove(Component component){_children.Remove(component);}public override void Display(){Console.WriteLine(_name);foreach (Component component in _children){component.Display();}}
}// 客戶端代碼
class Client
{static void Main(string[] args){Composite root = new Composite("root");Leaf leaf1 = new Leaf("leaf1");Leaf leaf2 = new Leaf("leaf2");Composite composite1 = new Composite("composite1");Composite composite2 = new Composite("composite2");root.Add(leaf1);root.Add(composite1);composite1.Add(leaf2);composite1.Add(composite2);root.Display();}
}

解釋

組合模式中的抽象組件類(Component)定義了樹狀結(jié)構(gòu)中所有對象的通用行為的接口。Leaf類是葉子節(jié)點類,它繼承自Component類,并實現(xiàn)了Display方法。Composite類是容器節(jié)點類,它繼承自Component類,并持有一組Component對象。在Composite類的Display方法中,首先輸出自身信息,然后遞歸調(diào)用所有子節(jié)點的Display方法。

在客戶端代碼中,首先創(chuàng)建了一個根節(jié)點root和一些葉子節(jié)點和容器節(jié)點。通過調(diào)用容器節(jié)點的Add方法可以將其他節(jié)點添加到其內(nèi)部。最后調(diào)用root.Display()方法,會遞歸地展示整個樹狀結(jié)構(gòu)。

7. 享元模式(Flyweight Pattern)

享元模式是一種池技術(shù),主要用于減少創(chuàng)建對象的數(shù)量,以減少內(nèi)存占用和提高性能。享元模式通過共享已創(chuàng)建的對象,避免重復(fù)創(chuàng)建相同的對象。

示例代碼

// 享元接口
interface IFlyweight
{void Operation();
}// 具體享元類
class ConcreteFlyweight : IFlyweight
{private readonly string _intrinsicState;public ConcreteFlyweight(string intrinsicState){_intrinsicState = intrinsicState;}public void Operation(){Console.WriteLine($"ConcreteFlyweight's Operation with {_intrinsicState}");}
}// 享元工廠類
class FlyweightFactory
{private Dictionary<string, IFlyweight> _flyweights = new Dictionary<string, IFlyweight>();public IFlyweight GetFlyweight(string key){if (_flyweights.ContainsKey(key)){return _flyweights[key];}else{IFlyweight flyweight = new ConcreteFlyweight(key);_flyweights.Add(key, flyweight);return flyweight;}}
}// 客戶端代碼
class Client
{static void Main(string[] args){FlyweightFactory factory = new FlyweightFactory();IFlyweight flyweight1 = factory.GetFlyweight("key1");flyweight1.Operation();IFlyweight flyweight2 = factory.GetFlyweight("key2");flyweight2.Operation();IFlyweight flyweight3 = factory.GetFlyweight("key1");flyweight3.Operation();}
}

解釋

享元模式中的享元接口(IFlyweight)定義了享元類的公共方法。ConcreteFlyweight類是具體享元類,它實現(xiàn)了IFlyweight接口,并持有一個內(nèi)部狀態(tài)(_intrinsicState)。FlyweightFactory類是享元工廠類,用于創(chuàng)建和管理享元對象。

在客戶端代碼中,首先創(chuàng)建了一個FlyweightFactory對象。通過調(diào)用工廠的GetFlyweight方法可以獲取享元對象,如果對象已經(jīng)存在,則直接返回已有對象;如果對象不存在,則創(chuàng)建新的享元對象并將其緩存起來。最后調(diào)用享元對象的Operation方法時,會輸出其內(nèi)部狀態(tài)。

在這里插入圖片描述


結(jié)論

結(jié)構(gòu)型設(shè)計模式在C#編程中具有廣泛的應(yīng)用。適配器模式用于解決不兼容接口的問題,裝飾器模式用于動態(tài)地擴展對象的功能,代理模式用于控制對對象的訪問,組合模式用于處理樹狀結(jié)構(gòu)數(shù)據(jù),享元模式用于減少對象創(chuàng)建的數(shù)量。合理使用這些結(jié)構(gòu)型設(shè)計模式可以提高代碼的可讀性、可維護性和可擴展性。

參考資料:

  • Design Patterns in C#
http://www.risenshineclean.com/news/55385.html

相關(guān)文章:

  • 網(wǎng)站域名解析ip新手做電商怎么起步
  • 企事業(yè)單位社區(qū)優(yōu)化設(shè)計三要素
  • 上海網(wǎng)站備案信息免費發(fā)帖推廣的平臺
  • 做幼兒園成長冊的素材網(wǎng)站企業(yè)推廣網(wǎng)絡(luò)營銷外包服務(wù)
  • 查域名的網(wǎng)站網(wǎng)站seo排名培訓(xùn)
  • 小江網(wǎng)站建設(shè)公司今天有哪些新聞
  • 知名的環(huán)保行業(yè)網(wǎng)站開發(fā)愛鏈網(wǎng)買鏈接
  • 開網(wǎng)站做外貿(mào)seo快速排名多少錢
  • 哈爾濱網(wǎng)站優(yōu)化咨詢長沙網(wǎng)站seo哪家公司好
  • 小視頻網(wǎng)站開發(fā)流程圖蘇州百度推廣分公司電話
  • 濟南做網(wǎng)站優(yōu)化公司百度超級鏈
  • 什么官網(wǎng)比較容易做網(wǎng)站武漢seo優(yōu)化排名公司
  • wordpress評論刪除站點東莞百度推廣優(yōu)化
  • goodwork wordpressseo關(guān)鍵字優(yōu)化技巧
  • wordpress導(dǎo)入媒體失敗深圳優(yōu)化seo
  • 厚街做網(wǎng)站公司最基本的網(wǎng)站設(shè)計
  • 濟南住房和城鄉(xiāng)建設(shè)局網(wǎng)站自媒體怎么做
  • wordpress建站鏡像百度蜘蛛池自動收錄seo
  • 變態(tài)sf網(wǎng)站網(wǎng)站搜索引擎優(yōu)化免費
  • 國土局網(wǎng)站建設(shè)制度制作鏈接的小程序
  • 網(wǎng)頁制作教學(xué)天津seo顧問
  • 河北高端網(wǎng)站設(shè)計河北seo推廣
  • 德州做網(wǎng)站公司2023新聞熱點事件
  • wordpress 無法創(chuàng)建目錄 linux廣告開戶南京seo
  • 如何做網(wǎng)站不被坑新聞頭條最新消息今天發(fā)布
  • 做十個網(wǎng)站企業(yè)網(wǎng)站如何優(yōu)化
  • 網(wǎng)站建設(shè)端口品牌推廣專員
  • 可以做網(wǎng)絡(luò)兼職的網(wǎng)站百度搜索關(guān)鍵詞排行榜
  • 301的網(wǎng)站用什么來做論壇推廣網(wǎng)站
  • php網(wǎng)頁制作工具一鍵優(yōu)化大師