自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#實(shí)例解析適配器設(shè)計(jì)模式

開發(fā) 后端
在ASP.NET的適配器設(shè)計(jì)模式的文章中作者舉得例子并沒有實(shí)現(xiàn)把一個(gè)接口或類轉(zhuǎn)換到另外一個(gè)可以使用的類,僅僅是把輸入?yún)?shù)做了判斷,這是不是適配器模式我不予置評(píng),下面貼出我實(shí)現(xiàn)的適配器模式。

今天看到一個(gè)園子里的朋友寫了一篇ASP.NET的適配器設(shè)計(jì)模式的文章。其中提到了把輸入的電壓轉(zhuǎn)換成燈泡適合的電壓,這樣才能使燈泡正常工作。正巧,我也在學(xué)習(xí)設(shè)計(jì)模式,其中翻看了一下秦小波寫的《設(shè)計(jì)模式與禪》這本書,其中提到了設(shè)計(jì)模式的定義為:

將一個(gè)類的接口變成客戶端所期待的另一種接口,從而使原本因接口不匹配而無法在一起工作的兩個(gè)類能夠一起工作。

適配器模式又叫變壓器模式,也叫包裝模式。

這里作者舉得例子并沒有實(shí)現(xiàn)把一個(gè)接口或類轉(zhuǎn)換到另外一個(gè)可以使用的類,僅僅是把輸入?yún)?shù)做了判斷,這是不是適配器模式我不予置評(píng),下面貼出我實(shí)現(xiàn)的適配器模式。

我們知道,中國(guó)的電壓是220V,而日本的電壓為110V,我們中國(guó)生產(chǎn)的電燈泡一般額定電壓為220V,如果想要這個(gè)燈泡在日本能夠正常工作就必須使用一個(gè)適配器,把110V電壓轉(zhuǎn)換成220V電壓。

定義接口代碼如下:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.  
  6. namespace HelloWorld  
  7. {  
  8.     /// <summary>  
  9.     /// 中國(guó)電接口  
  10.     /// </summary>  
  11.     public interface IChinaElectricity  
  12.     {  
  13.         /// <summary>  
  14.         /// 電壓  
  15.         /// </summary>  
  16.         /// <returns></returns>  
  17.         int Voltage();  
  18.     }  
  19.     /// <summary>  
  20.     /// 日本電接口  
  21.     /// </summary>  
  22.     public interface IJapanElectricity  
  23.     {  
  24.         /// <summary>  
  25.         /// 電壓  
  26.         /// </summary>  
  27.         /// <returns></returns>  
  28.         int Voltage();  
  29.     }  
  30.     /// <summary>  
  31.     /// 燈接口  
  32.     /// </summary>  
  33.     public interface IChinaLight  
  34.     {  
  35.         /// <summary>  
  36.         /// 發(fā)光  
  37.         /// </summary>  
  38.         /// <returns></returns>  
  39.         string Light(int voltage);  
  40.     }  

定義的類如下:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.  
  6. namespace HelloWorld  
  7. {  
  8.     public class ChinaElectricity : IChinaElectricity  
  9.     {  
  10.         public int Voltage()  
  11.         {  
  12.             return 220;  
  13.         }  
  14.     }  
  15.  
  16.     public class JapanElectricity : IJapanElectricity  
  17.     {  
  18.         public int Voltage()  
  19.         {  
  20.             return 110;  
  21.         }  
  22.     }  
  23.  
  24.     public class ChinaLight : IChinaLight  
  25.     {  
  26.         /// <summary>  
  27.         /// 發(fā)光  
  28.         /// </summary>  
  29.         /// <returns></returns>  
  30.         public string Light(int voltage)  
  31.         {  
  32.             if (voltage == 220)  
  33.             {  
  34.                 return "我發(fā)光啦....";  
  35.             }  
  36.             else 
  37.             {  
  38.                 return ("電壓不正確,無法正常工作...");  
  39.             }  
  40.         }  
  41.     }  
  42.     /// <summary>  
  43.     /// 定義一個(gè)電壓適配器  
  44.     /// </summary>  
  45.     public class ElectricityAdapter : IChinaElectricity  
  46.     {  
  47.         private int voltage = 0;  
  48.         private IJapanElectricity iJElectricity = null;  
  49.           
  50.         public ElectricityAdapter(IJapanElectricity _baseElectricity)  
  51.         {  
  52.             iJElectricity = _baseElectricity;  
  53.             voltage = this.iJElectricity.Voltage();  
  54.         }  
  55.         public int Voltage()  
  56.         {  
  57.             return voltage + 110;  
  58.         }  
  59.     }  

這里面我們定義了一個(gè)適配器的類,把日本電壓適配成中國(guó)電壓,這樣才能夠使燈泡正常工作。代碼如下:

  1. static void Main(string[] args)  
  2.         {  
  3.  
  4.             //初始化一個(gè)中國(guó)電燈  
  5.             IChinaLight iCLight = new ChinaLight();  
  6.             //初始化中國(guó)的電  
  7.             IChinaElectricity iCElectricity = new ChinaElectricity();  
  8.             //初始化日本電  
  9.             IJapanElectricity iJElectricity =new JapanElectricity();  
  10.  
  11.             //使用適配器  
  12.             IChinaElectricity iCAElectricity = new ElectricityAdapter(iJElectricity);  
  13.  
  14.             //電壓正確電燈發(fā)光  
  15.             Console.WriteLine(iCLight.Light(iCElectricity.Voltage()));  
  16.  
  17.             //使用電壓適配器進(jìn)行適配  
  18.             Console.WriteLine(iCLight.Light(iCAElectricity.Voltage()));  
  19.  
  20.             //電壓不正確,電燈產(chǎn)生異常  
  21.             Console.WriteLine(iCLight.Light(iJElectricity.Voltage()));  
  22.               
  23.         } 

通過適配器模式的定義可以知道,其實(shí)適配器模式無非是把一種已經(jīng)無法修改,或是修改成本較高的源角色通過適配角色轉(zhuǎn)換成目標(biāo)角色,這樣整個(gè)業(yè)務(wù)體系才能夠在代價(jià)最小的情況下進(jìn)行正常運(yùn)行。

適配器模式的優(yōu)點(diǎn):

適配器模式可以讓兩個(gè)沒有任何關(guān)系的類在一起運(yùn)行,只要適配器這個(gè)角色能夠搞定他們就行。

  • 增加了類的透明性。
  • 提高了類的復(fù)用度。
  • 靈活性非常好。

適配器模式的使用場(chǎng)景:

適配器應(yīng)用場(chǎng)景只要記住一點(diǎn)就足夠了:你有動(dòng)機(jī)修改一個(gè)已經(jīng)投產(chǎn)中的接口時(shí),適配器模式可能是最適合你的模式。比如系統(tǒng)擴(kuò)展了,只需要一個(gè)已有或新建立的類,但這個(gè)類又不符合系統(tǒng)的接口,這個(gè)時(shí)候使用適配器模式比修改已存在的類代價(jià)要小的多。

原文鏈接:http://www.cnblogs.com/lifeil/archive/2013/02/25/2932178.html

責(zé)任編輯:林師授 來源: 博客園
相關(guān)推薦

2024-07-31 10:41:16

C#設(shè)計(jì)模式

2020-10-25 08:56:21

適配器模式

2012-05-16 17:22:11

Java設(shè)計(jì)模式

2013-11-26 16:39:21

Android設(shè)計(jì)模式

2021-02-18 08:39:28

設(shè)計(jì)模式場(chǎng)景

2022-02-18 17:21:29

適配器模式客戶端

2022-02-13 23:33:24

設(shè)計(jì)模式Java

2024-02-22 12:13:49

適配器模式代碼

2014-07-17 10:55:10

Win8.1應(yīng)用開發(fā)適配器模式

2012-04-12 09:33:02

JavaScript

2022-05-29 22:55:00

適配器設(shè)計(jì)模式

2009-11-18 18:08:20

PHP適配器模式

2022-12-12 09:20:59

適配器模式接口

2021-08-16 17:15:19

設(shè)計(jì)模式Android適配器模式

2012-08-02 10:46:34

JavaAdapter模式

2024-04-10 12:27:43

Python設(shè)計(jì)模式開發(fā)

2021-02-16 08:16:09

適配器模式MybatisJava

2011-04-28 09:54:50

jQuery

2023-08-15 11:07:37

適配器模式TypeScript

2012-09-19 15:29:26

Worklight適配器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)