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

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

	/// <summary>
    /// B中目前只定义了英雄KASS
    /// </summary>
    public class KASS
    {
        public void R()
        {
            //KASS的技能
        }
    }

	/// <summary>
    /// 定义英雄的接口
    /// </summary>
    public class Hero
    {
        /// <summary>
        /// 使用virtual修饰以便子类可以重写
        /// </summary>
        public virtual void attack()
        {
            //英雄进攻的方法和招数
        }
    }

    /// <summary>
    /// 定义适配器
	/// B暂时提供英雄KASS
    /// </summary>
    public class HeroAdapter:Hero
    {
        // 建立一个私有的英雄KASS对象
        private KASS kass = new KASS();

        /// <summary>
        /// 通过重写,表面上调用attack()方法,实际调用R()
        /// </summary>
        public override void attack()
        {
            kass.R();
        }
    }

	/// <summary>
    /// Tom负责的模块A
    /// </summary>
	public class A
    {
        public static void Main(string[] args)
        {
            // A需要借助B中的英雄完成进攻的任务,但B还未定下是那个英雄,所以不能直接创建特定英雄的对象
			// 但我们知道肯定要一个英雄,并且需要这个英雄去进攻
            Hero hero = new HeroAdapter();
            hero.attack();

            //...
        }
    }

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

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

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

using demo02.Helper;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace demo02.DataModel
{

        public class University : Base
        {

            public University(String id, String name, String summary, String imagePath, String category, double stars, String tileImagePath)
                : base(id, name, summary, imagePath)
            {
                this.Category = category;
                this.Stars = stars;
                this.Projects = new ObservableCollection<Project>();
                this.Images = new ImageHelper();
                this.TileImagePath = tileImagePath;
            }

            public string TileImagePath { get; set; }
            public string Category { get; set; }
            public double Stars { get; set; }
            public ObservableCollection<Project> Projects { get; set; }

            public int ClickTimes { get; set; }
            //兼容
            public ImageHelper Images { get; set; }

        }

}

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

Win8.1应用开发之适配器模式(C#实现),布布扣,bubuko.com

时间: 2024-12-09 15:29:51

Win8.1应用开发之适配器模式(C#实现)的相关文章

Win8.1应用开发之动态磁贴

using demo02.Common; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices.WindowsRuntime; using Windows.ApplicationModel; using Windows.ApplicationModel.Activation; using Windows.Fou

Win8.1应用开发之离线缓存

我们在开发应用商店应用时,需要app具有缓存的功能,这样在离线模式下,仍能工作.我们选择的project为Hub. 这里采取的策略是:在HubPage.xaml.cs(之所以不选择App.xaml.cs,是为了能让用户一边操作界面一边进行下载)中,利用await异步编程,避免阻塞UI,先读取存有图片路径的JSON,然后解析该JSON得到每一张图片的URI,再根据URI下载图片,对于文字资源,直接下载JSON.这里要特别注意文件操作--文件权限,同时更要注意文件流的选取--如果选择不当会导致在下载

Win8.1应用开发之多线程

在Win8.1 metro开发(C#)中,制定一个线程的具体实现如下: Task task = Task.Run( () => { //要在另一个线程中执行的逻辑 }); //主线程执行逻辑 这个task任务就相当于旧版的Thread多线程,在.NET 4.0以后就统称为Task任务了. Task task = new Task(() => { //任务逻辑 }); task.Start();//开始这个任务 task.ContinueWith((t) => { //任务结束后,执行这里

Win8.1应用开发之异步编程

在win8应用商店开发时,我们会遇到许多异步方法,它们存在的目的就是为了确保你的应用在执行需要大量时间的任务时仍能保持良好的响应,也就是说调用异步API是为了响应用户的操作.设想一下我们点击一个Button,会从网上下载一些信息,如果没有异步,我们就不得不等它下载完才能继续进行操作.为了能在下载时保持响应,windows提供了一个用于下载源的异步方法SyndicationClient.RetrieveFeedAsync. // Put the keyword, async on the decl

WIN8.1 Android开发环境的搭建

1.下载JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.安装JDK 直接安装即可,路径选择自己喜欢的,其他一路NEXT,我的安装路径[D:\\Java\\jdk1.8.0_11] 3.配置JAVA环境变量 打开步骤:我的电脑 - 右键属性 - 高级系统设置 - 高级 - 环境变量    配置环境变量: a)新建变量[JAVA_HOME],变量值为[JDK安装路径],我的是[D:\\Java

VS2010 + OpenNI2 + Kinect SDK1.8 在win8.1下开发环境的搭建

 VS2010 + OpenNI2 + Kinect SDK1.8 在win8.1下开发环境的搭建 1. 先安装kinect1.8,再安装openni2,默认路径就好. 2.配置VS2010建立的openni的project所需要的头文件和库文件,在项目的属性中配置. (1)Configuration Properties,C/C++,Gerenal,在Additiaonal Include Directories项中选择openni头文件的文件夹 默认路径为C:\Program Files

Android开发之适配器模式初探

我们在开发Android的时候经常通过Adapter把数据和UI对象连接在一起,spinner.ListView之类的控件都可以用适配器来自定义其组建,使其更加丰富.适配器模式是将两个不兼容的类纠合在一起使用,属于结构型,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份.简单的来说,就是你有一个机器人是只会踢足球的,另一个机器人只会打篮球的,然后你想有让他既会踢足球又会打篮球,那他的芯片里要将这两种方法都集合在一起,可我们又不知道原来的踢足球和打篮球的方法是怎么写的,也不想改啊

JavaScript设计模式与开发实践 适配器模式

适配器模式的作用是解决两个软件实体间的接口不兼容的问题.使用适配器模式之后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作. 适配器的别名是包装器(wrapper),这是一个相对简单的模式.在程序开发中有许多这样的场景:当我们试图调用模块或者对象的某个接口时,却发现这个接口的格式并不符合目前的需求.这时候有两种解决办法,第一种是修改原来的接口实现,但如果原来的模块很复杂,或者我们拿到的模块是一段别人编写的经过压缩的代码,修改原接口就显得不太现实了.第二种办法是创建一个适配器,将原接口转换

Win8.1应用开发之文件操作

在操作文件之前,先相应用的应用功能声明进行设定.用户通过C#(非UI)对win8.1上的文件进行訪问,仅仅能局限于图片,音乐,视频和文档四个目录. 而通过文件选取器则能訪问到整个系统的文件. (一)应用功能声明 对于win8应用商店应用,打开Package.appxmanifest文件.点击"功能"选项卡,勾选"音乐库","图片库"和"视频库",这样你就能够通过代码对这里面的文件和目录进行操作: 音乐 musicLibrary