zoukankan      html  css  js  c++  java
  • .Net设计模式_适配器模式

    引言:

    有一次我看到一个朋友拿出一个三角型的东西,好奇的上去一看你,我勒个去,传说中的万能插口转接器(插口适配器)。

    一面是插入口,集合了我认识的所有插口的形状,也有国内没看见过的;另一个是跟插座接触的,也是集合了我见过的所有样式,当然也有我没见过的。

    问了下,这个三角型的东西,全世界通用(前提是跟他的另一个变压器一起使用)。这个东西老贵了,不算变压器,也要两张毛爷爷多。

    而这就是现实生活中的适配器模式。

    理解:

    适配器,就是把原来两个不能一起使用的东西、模块、系统,通过中间的一个转化器,变成两个东西、模块、系统可以连接起来一起使用。

    这个在IT项目中是经常碰到的问题,比如我们需要在一个已有的系统平台中,加载我们开发的模块系统,那么授权系统就需要用别人的,

    这个时候我们需要做一个适配器,把平台中的授权系统封装后,给我们系统使用。

    适配器模式,分两种:接口适配器和对象适配器。

    代码示例:

    接口适配器

    // 第三方系统的操作
    public class OperateUserInfo
    {
        public String OperateUser()
        {
            return "用户的姓名";
        }
    }
    // 获取用户信息接口
    public interface IUser
    {
        String GetUserName();
    }
    // 实现接口
    public class UserAdapter : IUser
    {
        OperateUserInfo _opObj = new OperateUserInfo();
        public string GetUserName()
        {
            return _opObj.OperateUser();
        }
    }
    static void Main(string[] args)
    {
        // 调用
        IUser _userObj = new UserAdapter();
        Console.WriteLine(_userObj.GetUserName());
        Console.ReadLine();
    }

    对象适配器

    public class User
    {
        public virtual String GetUserName()
        {
            return String.Empty;
        }
    }
    
    public class UserAdapter2 : User
    {
        OperateUserInfo _opObj = new OperateUserInfo();
        public override String GetUserName()
        {
            return _opObj.OperateUser();
        }
    }
    static void Main(string[] args)
    {
        // 调用
        IUser _userObj = new UserAdapter();
        Console.WriteLine(_userObj.GetUserName());
        Console.WriteLine("----");
        // 
        User _userObj2 = new UserAdapter2();
        Console.WriteLine(_userObj2.GetUserName());
    
        Console.ReadLine();
    }

    这两种模式的区别在于,接口的适配是没有默认实现的,所有的方法都是需要继承类自己实现的。
    而对象模式是,可以有自己的实现的,这个其实就是抽象类和接口的区别吧。

    总结:

    1、 对象适配用处是,可以使Adaptee不必实现不需要的方法,具体就是其表现形式就是父类实现缺省方法,而子类只需实现自己独特的方法。
    2、 适配器类可以是抽象类。
    3、 带参数的适配器模式。使用这种办法,适配器类可以根据参数返还一个合适的实例给客户端。

    应用场景:

    1、 系统需要使用现有的类,而此类的接口不符合系统的需要。
    2、 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。这些源类不一定有很复杂的接口。
    3、 仅对对象适配器而言,在设计里,需要改变多个已有子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。

    特别描述:

    4、代码IUser _userObj = new UserAdapter();从耦合度来说这行代码的不符合要求,因为耦合度太高,所以需要我们设计时解耦。

    解耦的方式是,使用反射和泛型的感念,来动态声明实例。

    5、但是这里的Demo只是说明适配器模式,真真在设计时,如何使用适配器,肯定不是Demo中的那样。

    代码下载:

    百度云盘 http://pan.baidu.com/s/1bn6B7Z5

    CSDN  http://download.csdn.net/detail/hater22/6850527

  • 相关阅读:
    15-01-18 C# 面向对象 13
    15-01-15 C# 面向对象 12
    15-01-12 C# 面向对象 11
    15-01-11 C# 面向对象 10
    15-01-10 C# 面向对象 09
    了解 Azure 中的无服务器计算
    了解 Azure 虚拟机
    什么是 Azure?
    云服务的类型
    云部署模型
  • 原文地址:https://www.cnblogs.com/kimi-gyj/p/3518955.html
Copyright © 2011-2022 走看看