笔记-大话设计模式-17 适配器模式

适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。

适配器模式有两种类型:类适配器模式和对象适配器模式。

DataAdapter用作DataSet和数据源之间的适配器以便检索和保存数据。DataAdapter通过映射Fill(这更改了DataSet中的数据以便与数据源中的数据相匹配)和Update(这更改了数据源中的数据以便与DataSet中的数据相匹配)来提供这一适配器。

Demo1:

    class Target
    {
        public virtual void Request()
        {
            Console.WriteLine("普通请求!");
        }
    }
    class Adaptee
    {
        public void SpecialRequest()
        {
            Console.WriteLine("特殊请求!");
        }
    }
    class Adapter : Target
    {
        private Adaptee adaptee = new Adaptee();

        public override void Request()
        {
            adaptee.SpecialRequest();
        }

    }

Test:

            Target target = new Adapter();
            target.Request();

Demo2:

    abstract class Player
    {
        protected string name;

        public Player(string name)
        {
            this.name = name;
        }

        public abstract void Attack();
        public abstract void Defence();
    }
    class Forward : Player
    {
        public Forward(string name)
            : base(name)
        {

        }
        public override void Attack()
        {
            Console.WriteLine("前锋 {0} 进攻", name);
        }

        public override void Defence()
        {
            Console.WriteLine("前锋 {0} 防御", name);
        }
    }
    class SpecialPlayer
    {
        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public void SpecialAttack()
        {
            Console.WriteLine("外籍球员 {0} 进攻",name);
        }

        public void SpecialDefence()
        {
            Console.WriteLine("外籍球员 {0} 防御", name);
        }        

    }
    class AdapterPlayer : Player
    {
        private SpecialPlayer sp = new SpecialPlayer();

        public AdapterPlayer(string name)
            : base(name)
        {
            sp.Name = name;
        }
        public override void Attack()
        {
            sp.SpecialAttack();
        }

        public override void Defence()
        {
            sp.SpecialDefence();
        }
    }

Test:

            Player p1 = new Forward("巴蒂尔");
            p1.Attack();
            p1.Defence();

            Console.WriteLine(Environment.NewLine);

            Player sp = new AdapterPlayer("姚明");
            sp.Attack();
            sp.Defence();
时间: 2024-10-05 22:47:53

笔记-大话设计模式-17 适配器模式的相关文章

大话设计模式_适配器模式(Java代码)

适配器模式:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 简单描述: 大话设计模式中的截图: 代码例子: AbstractPlayer类: 1 package com.longsheng.adapter; 2 3 public abstract class AbstractPlayer { 4 5 public abstract void attack(); 6 7 public abstract void defenc

<十三>读<<大话设计模式>>之适配器模式

其实我感觉这个模式是最简单的一个设计模式了,看着名字可能不明白,其原来就是一个接口.比如电脑的USB接口,内部不管外部插得什么设备只要连接USB,内部都能接收到信号,原因就是两设备之间多了个桥梁------USB. 适配器模式:将一个类的接口转换成客户希望的另一个接口.它使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. <<大话设计模式>>是以NBA球员在外国培训不懂外语,而需要翻译者来帮其翻译,那这个翻译者就是接口了.好啰嗦啊,还是用代码解释一切,因为程序员就是活在代码

JAVA学习笔记--策略设计模式与适配器模式

一.策略设计模式 创建一个能够根据所传递对象的不同而具有不同行为的方法被称为策略设计模式:这类方法包含所要执行的算法中固定不变的部分,而"策略"包含变化的部分.策略就是传递进去的参数对象,它包含要执行的代码. 这种设计模式将算法分别独立封装起来,然后将其当做参数传递给方法从而让方法产生不同的行为,不同的算法可以进行替换(就像给方法不同的实参).我们可以知道,在策略设计模式中有三个部分:策略.策略引用.接收策略引用的方法(这是笔者自己根据理解给出的名词,并没有查询有没有这些术语).下面通

笔记-大话设计模式-16 状态模式

状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化. 消除庞大的条件分支语句.状态模式通过把各种状态转移逻辑分布到State的子类之间,来减少相互间的依赖. 当一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了. Demo1: abstract class

设计模式(17)-----适配器模式

适配器模式(adapter) 定义 将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. UML类图 例子 在NBA的赛场上,姚明还不会说英文,教练也不会说中文,所以需要一个翻译,对应的,翻译就起到了适配器的作用. 篮球运动员类 package com.csdhsm.pattemdesign.adapter; /** * @Title: Player.java * @Description: 球员抽象类 * @author: H

笔记-大话设计模式-18 备忘录模式

备忘录模式(Memento),在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态.Originator可根据需要决定Memento存储Originator的哪些内部状态. Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento

笔记-大话设计模式-19 组合模式

组合模式(Composite),将对象组合成树形结构以表示"部分-整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. Demo1: abstract class Component { protected string name; public Component(string name) { this.name = name; } public abstract void Add(Component c); public abstract void Remove

笔记-大话设计模式-20 迭代器模式

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. Demo1: abstract class Iterator { public abstract object First(); public abstract object Next(); public abstract bool IsDone(); public abstract object CurrentItem(); } abstract class Aggregate { pub

笔记-大话设计模式-21 单例模式

所有类都有构造方法,不编码则系统默认生成空的构造方法,若有显式定义的构造方法,默认的构造方法就会失效. 单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点. Demo1: sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } public static Singleton GetInstance(