zoukankan      html  css  js  c++  java
  • 适配器模式【大话设计模式DEMO】

    适配器模式,将一个类的接口转换成客户希望的另外一个借口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。系统的数据和行为都正确,但是借口不符时,我们应该考虑用适配器,目的是控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类。

    下面一个例子的叙述的是:如何让姚明和其他球员一样在球队里打比赛。实际上其他队员能的,能够实现的东西姚明同样能够做到(接口实现的内容相同,数据和行为都符合要求),只是由文化和语言的差异(接口实现时的表述不符合实际场景),中间要个翻译来让姚明和其他队员配合的天衣无缝。

    类设计图:

     

     

    代码
    class AdapterPattern
    {
    static void Main(string[] ags)
    {
    Forwards qf
    = new Forwards("巴蒂尔");
    Traslate tr
    = new Traslate("姚明");
    qf.Attack();
    tr.Attack();
    tr.Defense();
    Console.ReadKey();
    }
    }
    /// <summary>
    /// 球员
    /// </summary>
    abstract class Player
    {
    protected string Name;
    public Player(string Player)
    {
    this.Name = Player;
    }
    public abstract void Attack();
    public abstract void Defense();
    }
    /// <summary>
    /// 前锋
    /// </summary>
    class Forwards : Player
    {
    public Forwards(string name)
    :
    base(name)
    {
    }
    public override void Attack()
    {
    Console.WriteLine(
    "{0}进攻", Name);
    }
    public override void Defense()
    {
    Console.WriteLine(
    "{0}防守", Name);
    }
    }
    /// <summary>
    /// 中锋
    /// </summary>
    class Center : Player
    {
    public Center(string name)
    :
    base(name)
    {
    }
    public override void Attack()
    {
    Console.WriteLine(
    "{0}进攻", Name);
    }
    public override void Defense()
    {
    Console.WriteLine(
    "{0}防守", Name);
    }
    }
    /// <summary>
    /// 外国前锋
    /// </summary>
    class ForeignerCenter
    {
    public string FName;
    public void 进攻()
    {
    Console.WriteLine(
    "外籍中锋{0}进攻", FName);
    }
    public void 防守()
    {
    Console.WriteLine(
    "外籍中锋{0}防守", FName);
    }
    }

    /// <summary>
    /// 翻译
    /// </summary>
    class Traslate : Player
    {
    ForeignerCenter wjzf
    = new ForeignerCenter();

    public Traslate(string name)
    :
    base(name)
    {
    wjzf.FName
    = name;
    }

    internal ForeignerCenter ForeignerCenter
    {
    get
    {
    throw new System.NotImplementedException();
    }
    set
    {
    }
    }

    public override void Attack()
    {
    wjzf.进攻();
    }
    public override void Defense()
    {
    wjzf.防守();
    }
    }
  • 相关阅读:
    相册框架之AssetsLibrary
    内存管理
    xcode 配置系统环境变量 Preporocessing 预编译宏的另一种写法, 系统的DEBUG 由来
    LeetCode 最大子序和
    牛客 计算数组的小和
    牛客 未排序整数数组中累加和小于等于给定值的最长子数组长度
    牛客 未排序整数数组中累加和为给定值的最长子数组长度
    AtCoder ABC 140D Face Produces Unhappiness
    AtCoder ABC 140E Second Sum
    LeetCode 求众数 II
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1700269.html
Copyright © 2011-2022 走看看