Adapter适配器设计模式

一,Adapter适配器模式是将两个不兼容的类组合在一起使用,如下例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AdapterDesign
{
    //Adapter适配器模式是将两个不兼容的类组合在一起使用。
    class Program
    {
        static void Main(string[] args)
        {
            //正常的接口实现方法
            People p = new People();
            p.ispeak = new Chinese();
            p.Say();

            //第一种:Adapter适配器模式实现方法
            EnglishAdapter enaAdapter = new EnglishAdapter();
            enaAdapter._english = new English();
            p.ispeak = enaAdapter;
            p.Say();

            //第二种:Adapter适配器模式实现方法
            p.ispeak = new JapanAdapter();
            p.Say();
            Console.ReadKey();
        }
    }
    //People依赖于接口ISpeak,在People中定义了一个注入点(ISpeak _iSpeak),属于高层依赖底层
    public class People
    {
        public People() { }
        public ISpeak ispeak;
        public void Say()
        {
            this.ispeak.Say();
        }
    }

    //抽象接口
    public interface ISpeak
    {
        void Say();
    }

    //接口具体实现依赖于抽象接口
    public class Chinese : ISpeak
    {
        public void Say()
        {
            Console.WriteLine("中文");
        }
    }

    //第一种:Adapter适配器模式是将两个不兼容的类组合在一起使用,接口具体实现依赖于抽象接口
    public class EnglishAdapter : ISpeak
    {
        public English _english;
        public English english
        {
            get { return this._english; }
            set { this._english = value; }
        }
        public void Say()
        {
            this._english.SayEnglish();
        }
    }
    public class English
    {
        public void SayEnglish()
        {
            Console.WriteLine("英文");
        }
    }

    //第二种:Adapter适配器模式中间类继承实现
    public class JapanAdapter : Japan, ISpeak
    {
        public void Say()
        {
            SayJapan();
        }
    }
    public class Japan
    {
        public void SayJapan()
        {
            Console.WriteLine("日文");
        }
    }
}

综上:

1》将一个类的接口转换成另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

时间: 2024-11-05 14:50:43

Adapter适配器设计模式的相关文章

设计模式之适配器模式 adapter 适配器模式分类概念角色详解 类适配器 对象适配器 接口适配器 双向适配器

现实世界中的适配器模型 先来看下来几个图片,截图自淘宝 上图为港版的插头与港版的插座 上图为插座适配器卖家的描述图 上图为适配后的结果 现实世界中适配器模式 角色分类 这就是适配器模式在电源插座上的应用 我们看下在插座适配器中的几个重要角色 可以看得出来,大陆和港版插座面板,都是作为电源的角色,他们的功能是相似的或者说相近的 插头要使用插座,进而接通电流 现实世界到代码的转换 电源插座代码示例 港版插座面板 package adapter; /**目标角色 Target 接口 * 香港地区使用的

适配器设计模式

类的适配器模式 对象的适配器模式 接口的适配器模式 思想: 将类的某个接口转换成客户端期望的另一个接口表示 目的: 消除由于接口不匹配造成的类的兼容性问题 1.UML图之类的适配器设计模式 public class Source { 2. 3. public void method1() { 4. System.out.println("this is original method!"); 5. } 6.} [java] view plaincopy 1.public interfa

适配器设计模式简介

适配器模式是将将一个类的接口适配成用户所期待的. 生活中适配器也无处不在.常见的是电源适配器.一个15V笔记本通过电源适配器可以接在220V的电压下使用. 想象这么一个需求场景.在项目早期建立了很多类库,这个类库中方法众多,代码复杂,加入新的方法后或者修改旧有方法会使得原类库中方法大幅修改.(或者类库源码找不到了,也难以进行修改).那么此时可以重新建立一个新接口,通过适配器而使用原有方法. 适配器模式就是将一个接口转化为客户希望的另一个接口. 适配器的常用分类: 现在主要介绍单向适配器和单接口适

适配器设计模式初探(Java实现)

本篇随笔主要介绍Java实现设配器设计模式. 先来看下待解决的问题: (图片转自http://blog.csdn.net/jason0539) 由上图的情况可知,欧洲壁式插座只有三足插口,如果我们想要使用的是两足插口,就需要适配器来进行转换.(适配器一面是三足插口,一面是两足插口) 适配器模式一般有两种实现方式: 1.类适配器 2.对象适配器. 先来看下类适配器的UML图:  客户端只能操纵 Target 接口的 Request 方法来进行需要的操作(当然这里就相当于调用 Request 方法使

接口 interface 以及适配器设计模式原理

定义接口用的不是class,而是interface. 接口中常见的成员:而且这些成员都是固定的修饰符. 1.全局变量:public static final (不写的时候java会默认添加上去,但是阅读性不好) 2.抽象方法:public abstract 接口中的成员都是公共权限的. 类与类之间是继承关系,类与接口之间是实现关系. 接口实现implements 接口不可以实例化,只能由实现了接口的子类覆盖了接口中所有的抽象方法后,该子类才可以实例化,否则这个子类就是一个抽象类. 在java中不

6.适配器设计模式

public interface PinPlug{ void charge(); } 1.概述 适配器设计模式针对如下情况:-----客户需要用某个接口,但是能提供服务的接口没有实现那个接口. 客户端只能使用某种接口---客户端是台灯,接口是双孔插座 服务端----服务类是三孔插座 适配器类是服务类和客户端中间的一个桥接类---插线板 2.代码 适配器模式的分类: 类适配器----通过继承实现 对象适配器--通过组合实现 2.1类适配器 功能描述:为台灯充上电照明(台灯只能使用双孔插座) pub

Android adapter适配器的使用

ListView之SimpleAdapter SimpleAdapter的构造函数是: public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) 参数context:上下文,比如this.关联SimpleAdapter运行的视图上下文 参数data:Map列表,列表要显示的数据,这部分需要自己实现,如例子中的ge

【ThinkingInJava】12、适配器设计模式

/** * 书本:<Thinking In Java> * 功能:适配器设计模式 * 文件:Processor.java * 时间:2015年4月2日20:36:59 * 作者:cutter_point */ package Lesson9Interfaces.interfaceprocessor; public interface Processor { String name(); Object process(Object input); } /** * 书本:<Thinking

【ThinkingInJava】14、适配器设计模式 (2)

/** * 书本:<Thinking In Java> * 功能:适配器设计模式 * 文件:FilterAdapter.java * 时间:2015年4月2日20:52:07 * 作者:cutter_point */ package Lesson9Interfaces.interfaceprocessor; import Lesson9Interfaces.filters.BandPass; import Lesson9Interfaces.filters.Filter; import Les