zoukankan      html  css  js  c++  java
  • C#设计模式——适配器模式(Adapter Pattern)

    一、概述
    在软件开发中,常常会想要复用一个已经存在的组件,但该组件的接口却与我们的需要不相符,这时我们可以创建一个适配器,在需复用的组件的接口和我们需要的接口间进行转换,从而能够正常的使用需复用的组件。这就是适配器模式。
    二、适配器模式
    适配器模式将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
    适配器模式可分为类适配器和对象适配器两种,类适配器使用多重继承对两个接口进行匹配,对象适配器则依赖于对象的组合。
    类适配器模式的结构图如下:

    对象适配器模式的结构图如下:

    Target定义了客户需要使用的接口。
    Adaptee定义了已经存在的那个接口,该接口需要通过适配器转换成Target接口以便Client调用。
    Adapter对Adaptee接口和Target接口进行适配。
    三、示例
    我们来看一下适配器模式的应用场景。假定.NET类库中没有实现Stack,而我们在应用中需要用到Stack,这时就可以通过适配器模式将List的接口转换为Stack需要的接口。
    首先定义Stack接口

    1     interface IStack<T>
    2     {
    3         void Push(T item);
    4         T Pop();
    5     }

    接口实现Adapter

     1     public class MyStack<T> : IStack<T>
     2     {
     3         private List<T> _list = new List<T>();
     4 
     5         public void Push(T item)
     6         {
     7             _list.Add(item);
     8         }
     9 
    10         public T Pop()
    11         {
    12             T item = _list[_list.Count - 1];
    13             _list.RemoveAt(_list.Count - 1);
    14             return item;
    15         }
    16 
    17         public void PrintAll()
    18         {
    19             Console.WriteLine("Begin Print Stack Item");
    20             foreach (T item in _list)
    21             {
    22                 Console.WriteLine(item.ToString());
    23             }
    24             Console.WriteLine("End Print Stack Item");
    25         }
    26     }
  • 相关阅读:
    Eclipse中的Web项目自动部署到Tomcat
    Linux之grep命令
    Linux之sort
    Python 字典中一键对应多个值
    手动下载python更新后 换回以前版本
    N个降序数组,找到最大的K个数
    蓄水池抽样算法
    空瓶子换水问题
    rand()产生随机数 及其和clock()的不同
    C++复数运算 重载
  • 原文地址:https://www.cnblogs.com/saville/p/2444013.html
Copyright © 2011-2022 走看看