精华内容
下载资源
问答
  • 适配器模式实例

    2021-07-07 13:32:17
    适配器模式实例问题描述结构图编程实现Encode类适配者类(Adaptee)适配器类(Adapter)客户端类 问题描述 某OA系统需要提供一个加密模块,将用户机密信息(如:用户口令、邮箱等)加密之后再存储到数据库中,系统已经...

    问题描述

    某OA系统需要提供一个加密模块,将用户机密信息(如:用户口令、邮箱等)加密之后再存储到数据库中,系统已经定义好了数据库操作类。为了提高开发效率,系统需要重用已有的加密算法,这些算法封装在一些由第三方提供的类中,有些甚至没有源代码,试用适配器模式设计该加密模块,实现在不修改现有类的基础上重用第三方的加密方法。

    结构图

    在这里插入图片描述

    编程实现

    Encode类

    public interface Encode {
        String encodePwd(String password);
    }
    

    适配者类(Adaptee)

    public class Adaptee {
        public String encodeAPI(String password){
            return password.toUpperCase();
        }
    }
    

    适配器类(Adapter)

    public class Adapter implements Encode{
        private Adaptee adaptee;
    
        public Adapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
    
        @Override
        public String encodePwd(String password) {
            return adaptee.encodeAPI(password);
        }
    }
    

    客户端类

    public class Client {
        public static void main(String[] args) {
            Encode encode=new Adapter(new Adaptee());
            String result=encode.encodePwd("hello");
            System.out.println(result);
        }
    }
    
    展开全文
  • 对象适配器模式与类适配器模式相同,知识将Adapter类修改了,不再是继承src类,而是持有src类的实例,以解决兼容性问题。即持有src类,实现dst接口,完成src——>dst的适配 根据“合成复用原则”,在系统中尽量...

    对象适配器模式与类适配器模式相同,知识将Adapter类修改了,不再是继承src类,而是持有src类的实例,以解决兼容性问题。即持有src类,实现dst接口,完成src——>dst的适配

    根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系。
    以生活充电器例子来讲解适配器,充电器本身相当于Adapter。220V相当于src(被适配者),我们的目标是dst(目标)是5v直流电,使用对象适配器模式完成

    类图:
    在这里插入图片描述

    package objectAdapter;
    //被适配的类
    public class Voltag220V {
    	public int output220V() {
    		//输出220V的电压,不变
    		int src=220;
    		System.out.println("电压="+src+"伏特");
    		return src;
    		
    	}
    
    }
    
    
    package objectAdapter;
    //适配接口
    public interface IVoltag5V {
    	public int output5V();
    }
    
    
    package objectAdapter;
    //适配器类
    public class VoltagAdapter  implements IVoltag5V{
    
    	private Voltag220V voltag220V;//关联关系——聚合关系
    	
    	/**
    	 * 通过构造器传入一个Voltag220V实例
    	 */
    	public VoltagAdapter(Voltag220V voltag220v) {
    		
    		this.voltag220V = voltag220v;
    	}
    
    	@Override
    	public int output5V() {
    		int dst=0;
    		if(null!=voltag220V) {
    			int src=voltag220V.output220V();//获取220V电压
    			System.out.println("使用对象适配器,进行适配~~");
    			dst=src/44;
    			System.out.println("适配完成,输出的电压="+dst);
    		}
    		return dst;
    	}
    	
    
    }
    
    
    package objectAdapter;
    
    public class Phone {
    //充电的方法
    	public void charging(IVoltag5V iVoltag5V) {
    		if(iVoltag5V.output5V()==5) {
    			System.out.println("电压为5V,可以充电~~");
    		}else if(iVoltag5V.output5V()>5) {
    			System.out.println("电压大于5V,不可以充电~~");
    		}
    	}
    }
    
    
    package objectAdapter;
    
    public class Client {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		System.out.println("==类适配器模式===");
    		Phone phone=new Phone();
    		phone.charging(new VoltagAdapter(new Voltag220V()));
    
    	}
    
    }
    
    

    对象适配器模式:和类适配器模式同一种思想,只不过实现方式不同。根据合成复用原则,使用组合代替了继承,所以它解决了类适配器必须继承src的局限性问题,也不再要求dst必须是接口

    展开全文
  • 适配器模式实例(C#): 用Adapter模式设计一个仿生机器人: 要求机器人可以模拟各种动物行为,在机器人中定义了一系列方法,如机器人叫喊方法cry()、机器人移动方法move()等。如果希望在不修改已有代码的基础上...

    适配器模式实例(C#):

     

    用Adapter模式设计一个仿生机器人:

    要求机器人可以模拟各种动物行为,在机器人中定义了一系列方法,如机器人叫喊方法cry()、机器人移动方法move()等。如果希望在不修改已有代码的基础上使得机器人能够像狗一样汪汪叫,像狗一样快跑,或者像鸟一样叽叽叫,像鸟一样快快飞,使用适配器模式进行系统设计。


    类图:


    说明:此类图有visual studio 2012 自动生成。由类图可见,首先实现的一个AnimalAdaptee的类,下面是两个字类,分别具体实现鸟和狗的Cry和Move方法。Robot是一个抽象类,具体的Adaptor类实RobotAdaptor类,它申明了一个私有的_myAdaptee字段,其类型为AnimalAdaptee。

    由以上的实现,可以达到适配器模式和桥模式的效果,我们看到Adaptor中也没有具体的指定需要定制化的Adaptee,而是只维护了一个一类Adaptee的引用,这样可以使程序设计的可扩展性更强。

    源代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace RobotAdaptor
    {
        //机器人类
        abstract public class Robot
        {
            abstract public void RobotCry();
            abstract public void RobotMove();
            abstract public void SetAdaptee(object Value); //这么申明带有一个参数的抽象方法。
        }
        //抽象的Adaptee
        public class AnimalAdaptee
        {
            public virtual void Cry() { }
            public virtual void Move() { }    //这个虚拟居然这样用。。
        }
    
        //不同种类的动物
        //狗
        public class DogAdaptee : AnimalAdaptee
        {
            public override void Cry()
            {
                //base.Cry();
                Console.WriteLine("这是狗叫:汪汪汪!");
            }
            public override void Move()
            {
                //base.Move();
                Console.WriteLine("这是狗跳:跳跳跳!");
            }
        }
        //鸟
        public class BirdAdaptee : AnimalAdaptee
        {
            public override void Cry()
            {
                //base.Cry();
                Console.WriteLine("这是鸟叫:叽叽叽!");
            }
            public override void Move()
            {
                //base.Move();
                Console.WriteLine("这是鸟飞:快快飞!");
            }
        }
    
        //适配器类Adaptor
        public class RobotAdapptor : Robot
        {
            private AnimalAdaptee _myAdaptee;
            public AnimalAdaptee MyAdaptee
            {
                get { return _myAdaptee; }
                set { _myAdaptee = value; }
            }
            public override void SetAdaptee(Object Value)
            {
                _myAdaptee = (AnimalAdaptee)Value;
            }
            public override void RobotCry()
            {
                //throw new NotImplementedException();
                if (_myAdaptee == null) _myAdaptee = new AnimalAdaptee();
                _myAdaptee.Cry();
            }
            public override void RobotMove()
            {
                //throw new NotImplementedException();
                if (_myAdaptee == null) _myAdaptee = new AnimalAdaptee();
                _myAdaptee.Move();
            }
    
        }
        class Program
        {
            static void Main(string[] args)
            {
                Robot MyRobot = new RobotAdapptor();
                AnimalAdaptee dogAdaptee = new DogAdaptee();
    
                MyRobot.SetAdaptee(dogAdaptee);
                MyRobot.RobotCry();
                MyRobot.RobotMove();
    
                //申明为第二种鸟类
                AnimalAdaptee birdAdaptee=new BirdAdaptee();
                MyRobot.SetAdaptee(birdAdaptee);
                MyRobot.RobotCry();
                MyRobot.RobotMove();
    
                Console.ReadKey();
            }
        }
    }
    
    结果截图:



    直观的关系图:




    转载于:https://www.cnblogs.com/NewWork/archive/2013/06/11/3260557.html

    展开全文
  • 在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
  • 主要介绍了php设计模式之适配器模式,结合星际争霸游戏案例形式分析了PHP适配器模式相关原理、用法及操作注意事项,需要的朋友可以参考下
  • java适配器模式实例解析

    千次阅读 2018-06-02 11:43:15
    适配器模式作为一种结构型设计模式,在软件系统设计开发中使用到的频率非常之高,深受开发人员的青睐。本文会讲解适配器模式的知识要点,以及在实际项目中所使用的真实案例。 1、适配器模式概述: 适配器模式...

    适配器模式作为一种结构型设计模式,在软件系统设计开发中使用到的频率非常之高,深受开发人员的青睐。本文会讲解适配器模式的知识要点,以及在实际项目中所使用的真实案例。

    1、适配器模式概述:

    适配器模式(Adapter Pattern):将一个接口转换成客户所希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象型结构模式《设计模式的艺术》

    适配器模式类图

    上图为对象型适配器模式的标准类图,类结构型适配器设计模式稍有区别。在java这种单继承语言中,类结构型适配器模式相比于对象型的灵活度要差,因此本文只阐述对象型设计模式,本质是没有区别的。
    1)Client(客户端):外部使用程序
    2)Target(目标抽象类):定义用户需要的相关接口,作为接口或者是抽象类存在;
    3)Adaptee(适配者):要被适配的角色,定义类一系列的接口,实现用户需要的一些业务功能。但是这部分并不属于新的系统,可能是在其他软件系统中的,没有源码;
    4)Adapter(适配器):将Adaptee适配到Target上,适配器通常继承抽象目标类,并通过组合或是组合适配者,从而使得目标类与适配者之间形成关联。

    2、适配器模式示例:

    一些简单的示例网上已经有比较多,这里展示的示例是我去年做的一个项目,刚好用到适配器模式,所以拿项目中的设计出来与大家分享。由于保密原则在此只会用代号表示,不会有具体业务实现代码。不过会充分表现出设计思想。

    项目背景:

    该项目为一个文件共享系统,主要功能就是实现将客户端的文件共享到服务端并进行展示。原有系统如下:
    原有方案设计图

    从技术层面看该系统主要功能就是在client与server之间通信,实现资源共享。由于项目比较久,衍生出了2套协议,协议B与协议A完全不同,导致在同一个安卓系统机器上,如果有不同客户端需要使用不同服务端。很显然,同一个产品存在2个软件,而且功能是相同,是非常不合理的。

    协议统一解决方案:

    1)将协议A、B进行统一,使用一套新协议;
    2)将所有端的协议全部替换成新协议;
    使用一套统一的协议当然是能够比较好解决问题,不过也会带来一个问题,就是必须进行一次强升级操作。不管是client还是server都必须强制升级,否则就会出现问题。另外一个问题,团队当时人员不够,协议A相关项目已经比较久,没有足够人力重构项目。但是产品需求必须要求Android端的Server要进行统一,任何一个client端都可以与server端通信。

    适配器模式解决:

    上面在统一协议方案中已经阐述问题所在,由于本人是做Android开发,于是就在Android端进行设计处理,而其他端都不需要做修改。在资源有限情况下,相对优雅的解决了问题。
    适配器模式设计图
    通过在Android端进行组件化开发,将原有Android ServerA、B进行重构,合并为一个应用。Server Module(B)只是简单表示其他的Module,其实包括协议处理Module、业务实现、公用组建。Adapter Module主要负责将协议A转换成协议B,然后再将数据交给具体处理的Module。当然,转换后的协议同时也可以传个Windows Server,实现任何一个客户端可以与服务端进行通信。

    3、适配器模式优缺点分析:

    优点:

    1) 完美实现解耦,通过增加适配器类将适配者与目标接口联系起来,无需修改原有实现;
    2)提高复用性,适配器类可以在多个系统使用;
    3)符合开闭原则;

    结束语

    适配器模式是一种非常常用的结构型设计模式,尤其是在使用一些旧系统或者是类库时,经常会出现接口不兼容的问题,适配器模式在解决这类问题具有优势。学习设计模式一定不要局限代码层面,要从软件系统整体去考虑。而不是为了使用设计模式,而去使用设计模式。

    展开全文
  • MyCircleMenuText:《 android设计模式》对象适配器模式实例实践-圆形菜单项,同时参考张鸿洋关于建行的源码:https
  • public class Client { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("==类适配器模式==="); Phone phone=new Phone(); phone.charging(new ...
  • 适配器模式包括类适配器和对象适配器,第一种是利用实现和泛化来实现,第二种是利用泛化和关联或者组合来实现适配器的。 适配器类似于生活中的转换器,将原来不兼容接口和设备通过转换器来达到连接的效果。比如...
  • 一、适配器模式:是为了解决软件实体间的接口不兼容的问题。适配器的别名是包装器(wrapper);二、首先,假设我们已经有如下代码:var googleMap = { show: function(){ console.log( '开始渲染谷歌地图' ); } }...
  • 适配器模式,将一个类装换成客户期望的另外一个接口。Adapter模式使的原本由于接口不兼容而不能工作的那些类可以一起工作。 二、解决的问题 1、使用第三方组件,而这个组件的接口与目前系统接口不兼容(如方法与...
  • 适配器模式 简介 适配器模式是java设计模式中的一种结构型设计模式,如果是在系统中存在接口不兼容的接口,可以通过引入一个接口来使原本因为接口不兼容而不能一起工作的两个类能够一起工作。 “类的单一职责原则”...
  • 主要介绍了PHP设计模式之适配器模式代码实例,本文讲解了目标、角色、应用场景、优势等内容,并给出代码实例,需要的朋友可以参考下
  • C#设计模式之适配器模式应用实例
  • 主要介绍了Python设计模式编程中Adapter适配器模式的使用实例,一般来说适配器模式可以细分为类适配器和对象适配器模式,需要的朋友可以参考下
  • 主要介绍了PHP设计模式:适配器模式Adapter,结合实例形式详细分析了PHP适配器模式Adapter基本概念、功能、原理、用法及操作注意事项,需要的朋友可以参考下
  • 适配器模式

    2021-03-23 12:21:58
    适配器模式一、适配器模式二、适配器模式实例之算法适配1.实例说明2.实例类图3.实例代码参考文献 一、适配器模式 适配器模式(Adapter Pattern)分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高...
  • 适配器模式属于七种结构性模式(适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式)之一: 适配器模式又分三种:类的适配器模式、对象的适配器模式、接口的适配器模式适配器模式将某个...
  • 主要介绍了javascript设计模式 – 适配器模式,结合实例形式分析了javascript适配器模式相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
  • 适配器模式 简单实例

    2016-08-20 14:41:38
    Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 定义一个接口 public interface ShuiWa { void tuhuo();//不是强项 } 接口的实现类 public class ShuiWaImp implements ShuiWa ...
  • 适配器模式有两种实现方式,类适配器和对象适配器,因ABAP不支持多继承,故类适配器实际了只能适配一个Adaptee(适配者) 基础实现 类适配器 class adaptee definition create public. public section. methods: ...
  • 主要介绍了JavaScript适配器模式原理与用法,结合具体实例形式详细分析了JavaScript适配器模式概念、原理、使用方法与操作注意事项,需要的朋友可以参考下
  • 主要介绍了Android Spinner与适配器模式详解相关资料,并附代码实例,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,092
精华内容 27,636
关键字:

适配器模式实例