zoukankan      html  css  js  c++  java
  • 设计模式之—适配器模式<Adapter Pattern>

     适配器模式:在双方的数据和行为都是正确的,又不容易修改时用适配器模式,将两者结合。应用于项目的维护。

    目标类(Target)

    namespace AdapterPattern.CLASS
    {
        abstract class Target
        {
            public virtual void Request()
            {
                Console.WriteLine("普通请求");
            }
        }
    }
    View Code

    需要适配的类(Adaptee)

    namespace AdapterPattern.CLASS
    {
        class Adaptee
        {
            public void SpecialRequest()
            {
                Console.WriteLine("特殊请求!");
            }
        }
    }
    View Code

    适配器类(Adapter)

    namespace AdapterPattern.CLASS
    {
        class Adapter:Target
        {
            private Adaptee adaptee = new Adaptee();
            public override void Request()
            {
                adaptee.SpecialRequest();
            }
        }
    }
    View Code

    测试类(TestMain)

    namespace AdapterPattern
    {
        class TestMain
        {
            static void Main(string[] args)
            {
                Target target = new Adapter();
                target.Request();
    
                Console.WriteLine();
            }
        }
    }
    View Code

    详细代码如下:

    球员抽象类(Player)

    namespace AdapterPatternTest.CLASS
    {
        abstract class Player
        {
            protected string name;
            public Player(string name)
            {
                this.name = name;
            }
    
            public abstract void Attach();
            public abstract void Defence();
        }
    }
    View Code

    前锋类(Forward)继承于球员类(Player)

    namespace AdapterPatternTest.CLASS
    {
        class Forward:Player
        {
            public Forward(string name)
                : base(name)
            { }
    
            public override void Attach()
            {
                Console.WriteLine("前锋{0}进攻!",name);
            }
    
            public override void Defence()
            {
                Console.WriteLine("前锋{0}防守",name);
            }
        }
    }
    View Code

    后卫类(Defender)继承于球员类(Player)

    namespace AdapterPatternTest.CLASS
    {
        class Defender:Player
        {
            public Defender(string name)
                : base(name)
            { }
    
            public override void Attach()
            {
                Console.WriteLine("前锋{0}进攻!",name);
            }
    
            public override void Defence()
            {
                Console.WriteLine("后卫{0}防守!", name);
            }
        }
    }
    View Code

    中锋由于不懂英语需要翻译,定义外籍中锋类

    namespace AdapterPatternTest.CLASS
    {
        class ForeignCenter
        {
            private string name;
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
    
            public void 进攻()
            {
                Console.WriteLine("外籍中锋{0}进攻!",name);
            }
    
            public void 防守()
            {
                Console.WriteLine("外籍中锋{0}防守!",name);
            }
        }
    }
    View Code

    定义翻译类(Traslater)继承于球员类

    namespace AdapterPatternTest.CLASS
    {
        class Translator:Player
        {
            private ForeignCenter forCenter = new ForeignCenter();
    
            public Translator(string name)
                : base(name)
            {
                forCenter.Name = name;
            }
    
            public override void Attach()
            {
                forCenter.进攻();
            }
            public override void Defence()
            {
                forCenter.防守();
            }
        }
    }
    View Code

    测试类(TestMain)

    namespace AdapterPatternTest
    {
        class TestMain
        {
            static void Main(string[] args)
            {
                Player f = new Forward("巴特尔");
                f.Attach();
    
                Player d = new Defender("麦克格雷迪");
                d.Defence();
    
                Player forCenter = new Translator("姚明");
                forCenter.Attach();
                forCenter.Defence();
    
                Console.ReadLine();
            }
        }
    }
    View Code

    要么忍,要么狠,要么滚!
  • 相关阅读:
    实验五——循环结构学习总结
    实验七——函数定义及调用总结
    实验九——基本数据类型存储及应用总结
    实验六——循环结构程序练习总结
    第二次作业及总结——数据类型和运算符
    实验八——函数定义及调用总结
    实验四——多分支结构及本章总结
    开篇随笔
    第三次作业——for 语句及分支结构elseif
    第二次作业
  • 原文地址:https://www.cnblogs.com/zxd543/p/3254000.html
Copyright © 2011-2022 走看看