zoukankan      html  css  js  c++  java
  • 设计模式之十 适配器模式

    大家好,今天让我扯扯适配器模式吧

    我们先看看适配器的概念:

    百度百科上的介绍 适配器就是一个接口转化器,它能够是一个独立的硬件接口设备,同意硬件或电子接口与其他硬件或电子接口相连,也能够是信息接口.

    那么从这个概念我们能够看出,适配器就是一个用来转化的东西。

    比方说,中国电压标准是220V。而我们的电脑电源电压通常是19V(我的电脑是是20V).非常明显,220V的电压给19V的电源,假设不经过处理的话,我们的电源预计就会报废了。那么怎么做的呢?答案就是一个适配器。我们的电源适配器帮我们做了转化,使得220V的电源能够给我们19V的电脑电源用。

    简单理解就是 适配器进行了信息转化

    在软件开发的过程中,我们常常会用遇到这样的情况。

    我们通过接口来訪问类提供的服务,可是往往有一些现有的类已经可以完毕这个服务了,仅仅是它的接口不一定是我们所希望的,在这种情况下,现有的接口须要转化为客户类期望的接口,这样保证了对现有类的重用。假设不进行这种转化,客户类就不能利用现有类所提供的功能,适配器模式可以完毕这种转化。

    好了,看看经典的2个适配器模式的图吧

    首先是类适配器

    接着是对象适配器


    这两个的区别能够从UML图中看出来了

    当中

    Target:就是我们定义好的接口

    Adaptee:就是现有的API函数,也就是须要适配的接口

    Adapter:适配器类,把Adaptee转换成Target

    那么我们贴个代码吧

    如果有这么一个背景:

    我们如今找到了一个能够剪切图片的工具类,而我们之前也定义了一个操作类接口,那么怎么复用呢?请看代码

    我们讲的是类适配器,对象适配器也是类似的(就是在adapter中内置一个apateee的引用,而且让adapter继承了Target,在adapter重写方法)

    package edu.fjnu.cs.hwb.adapter;
    
    public interface  Operation
    {
    	 void cutImage();
    }
    
    

    package edu.fjnu.cs.hwb.adapter;
    
    public class ImageOperationAdaptee
    {
    	public void shearImage()
    	{
    		System.out.println("ImageOperation's  shearImage()");
    	}
    }
    

    package edu.fjnu.cs.hwb.adapter;
    
    public class ImageOperationAdapter extends ImageOperationAdaptee implements Operation
    {
    
    	@Override
    	public void cutImage()
    	{
    		// TODO Auto-generated method stub
    		shearImage();
    	}
    }
    

    package edu.fjnu.cs.hwb.adapter;
    
    public class Client
    {
    	public static void main(String[] args)
    	{
    		Operation operation = new ImageOperationAdapter();
    		operation.cutImage();
    	}
    }
    

    结果:


    我之前上课问了老师,为什么对象适配器中要用继承,而不能用实现.老师跟我说:“这个东西有一个数学模型,验证后是用继承更好.我之前看过这个论文”..

    楼主果断弱爆了..



  • 相关阅读:
    passenger中的设置ssl
    memcached在rails中的使用介绍
    redis相关
    复制linode镜像
    memcached启动 安装
    A Short History of Character Sets
    du h df h 磁盘空间满处理办法
    硬盘2T 现在也才不到1000了,变得感觉太便宜了
    最近爬虫心得
    20110205网站更新部署过程记录
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3748066.html
Copyright © 2011-2022 走看看