Win8.1应用开发之适配器模式(C#实现)

移动开发
实际 上适配器模式是用于解耦。设想一下我们的程序模块A在与模块B打交道时,需要在许多地方多次使用B中某个类的方法,而负责开发B的程序猿Tom还未完全实 现该类,会随时更改该类中的方法,那么当Tom在修改时,负责A的攻城狮Jerry不得不进行苦逼的修改。聪明的项目经理Dabao想出了好方法——适配器模式。

实际上适配器模式是用于解耦。设想一下我们的程序模块A在与模块B打交道时,需要在许多地方多次使用B中某个类的方法,而负责开发B的程序猿Tom还未完全实 现该类,会随时更改该类中的方法,那么当Tom在修改时,负责A的攻城狮Jerry不得不进行苦逼的修改。聪明的项目经理Dabao想出了好方法——适配器模式,于是在Tom和Jerry之间进行了如下设计:

  1. /// <summary> 
  2.    /// B中目前只定义了英雄KASS 
  3.    /// </summary> 
  4.    public class KASS 
  5.    { 
  6.        public void R() 
  7.        { 
  8.            //KASS的技能 
  9.        } 
  10.    } 
  11.  
  12.  
  13.        /// <summary> 
  14.    /// 定义英雄的接口 
  15.    /// </summary> 
  16.    public class Hero 
  17.    { 
  18.        /// <summary> 
  19.        /// 使用virtual修饰以便子类可以重写 
  20.        /// </summary> 
  21.        public virtual void attack() 
  22.        { 
  23.            //英雄进攻的方法和招数 
  24.        } 
  25.    } 
  26.  
  27.  
  28.    /// <summary> 
  29.    /// 定义适配器 
  30.        /// B暂时提供英雄KASS 
  31.    /// </summary> 
  32.    public class HeroAdapter:Hero 
  33.    { 
  34.        // 建立一个私有的英雄KASS对象 
  35.        private KASS kass = new KASS(); 
  36.  
  37.        /// <summary> 
  38.        /// 通过重写,表面上调用attack()方法,实际调用R() 
  39.        /// </summary> 
  40.        public override void attack() 
  41.        { 
  42.            kass.R(); 
  43.        } 
  44.    } 
  45.        
  46.        
  47.        /// <summary> 
  48.    /// Tom负责的模块A 
  49.    /// </summary> 
  50.        public class A 
  51.    { 
  52.        public static void Main(string[] args) 
  53.        { 
  54.            // A需要借助B中的英雄完成进攻的任务,但B还未定下是那个英雄,所以不能直接创建特定英雄的对象 
  55.                        // 但我们知道肯定要一个英雄,并且需要这个英雄去进攻 
  56.            Hero hero = new HeroAdapter(); 
  57.            hero.attack(); 
  58.  
  59.            //... 
  60.        } 
  61.    } 

这样 有一天B将KASS替换成另一个英雄后,A不需要进行任何改动,只要将适配器HeroAdapter中的英雄替换为B修改后的新英雄,并将attack方 法中的实现换成新英雄的技能即可。任A多次使用英雄,最终只需修改一个适配器即可,这就实现了A和B的解耦。实际上我认为适配器的另一个作用是担当了A和 B之间沟通的桥梁:HeroAdapter出现在A中,同时HeroAdapter中包含B中的元素。负责B的Tom通过适配器明白他创建的英雄要能够完 成A中进攻的任务。

这里再举一个实际开发的例子进一步探讨一下适配器模式。

Win8.1 Metro开发中,XAML绑定了一个对象University

  1. using demo02.Helper; 
  2. using System; 
  3. using System.Collections.Generic; 
  4. using System.Collections.ObjectModel; 
  5. using System.Linq; 
  6. using System.Text; 
  7. using System.Threading.Tasks; 
  8.  
  9. namespace demo02.DataModel 
  10.  
  11.         public class University : Base 
  12.         { 
  13.           
  14.             public University(String id, String name, String summary, String imagePath, String category, double stars, String tileImagePath) 
  15.                 : base(id, name, summary, imagePath) 
  16.             { 
  17.                 this.Category = category; 
  18.                 this.Stars = stars; 
  19.                 this.Projects = new ObservableCollection<Project>(); 
  20.                 this.Images = new ImageHelper(); 
  21.                 this.TileImagePath = tileImagePath; 
  22.             } 
  23.  
  24.             public string TileImagePath { getset; } 
  25.             public string Category { getset; } 
  26.             public double Stars { getset; } 
  27.             public ObservableCollection<Project> Projects { getset; } 
  28.  
  29.             public int ClickTimes { getset; } 
  30.             //兼容 
  31.             public ImageHelper Images { getset; } 
  32.  
  33.         } 
  34.  

我会向服务器请求该对象的JSON形式,服务器端根据大学Id将大 学信息找到后组织到自己定义的类中,由于XAML绑定的缘故,我无法直接使用服务器端自己定义的类形式,这势必要经过一道工序,将服务器端的类形式转化为 我需要的类形式,这就好比外国朋友电器的插头不能适应我们国家的插座,那就需要一个适配器,通过适配器插到我们的插座上。其实上面的大学类就相当于这个适 配器,我将这个类告知负责服务器端开发的队友,他根据这个类的形式重新组织要发送的JSON。而我这边不需要再进行转化。

责任编辑:闫佳明 来源: wp.662p
相关推荐

2024-07-31 10:41:16

C#设计模式

2013-02-26 10:55:47

C#适配器设计模式

2012-05-16 17:22:11

Java设计模式

2021-02-18 08:39:28

设计模式场景

2020-10-25 08:56:21

适配器模式

2021-08-16 17:15:19

设计模式Android适配器模式

2024-04-10 12:27:43

Python设计模式开发

2012-04-12 09:33:02

JavaScript

2013-11-26 16:39:21

Android设计模式

2022-02-18 17:21:29

适配器模式客户端

2022-02-13 23:33:24

设计模式Java

2012-09-19 15:29:26

Worklight适配器

2009-11-18 18:08:20

PHP适配器模式

2013-11-19 12:23:42

Windows 8.1PC

2024-02-22 12:13:49

适配器模式代码

2012-08-02 10:46:34

JavaAdapter模式

2021-02-16 08:16:09

适配器模式MybatisJava

2011-04-28 09:54:50

jQuery

2013-12-10 09:44:00

网络适配器卸载

2013-10-29 10:19:56

Windows RT Surface
点赞
收藏

51CTO技术栈公众号