• 技术文章 >Java >java教程

    Java 适配器(Adapter)模式的实现方法

    黄舟黄舟2017-03-10 11:57:02原创790
    平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类的方法。有一个解决方法是,修改它们各自的接口,但是这是我们最不愿意看到的。这个时候Adapter模式就会派上用场了

    适配器 模式 有三种方式,一种是对象适配器,一种是类适配器, 一种是接口适配器

    以下举例说明:

    类适配器 类图



    public class DrawRectangle {//画方
    	public void drawRectangle(String msg) {
    		System.out.println("draw Rectangle: " + msg);
    	}
    }
    public interface IDrawCircle {//画圆的接口
    	void drawCircle();
    }
    /**
     * 类适配器 使用对象继承的方式,是静态的定义方式
     * @author stone
     *
     */
    public class DrawAdapter4Class extends DrawRectangle implements IDrawCircle {//既能画方又能画圆
    
    	@Override
    	public void drawCircle() {
    		System.out.println("DrawAdapter4Class: drawCircle");
    	}
    	
    }

    对象适配器类图:


    /**
     * 对象适配器: 使用对象组合的方式,是动态组合的方式。
     * 既能画方又能画圆
     * @author stone
     * DrawAdapter是适配器,DrawRectangle属于adapter,是被适配者,适配器将被适配者和适配目标(DrawCircle)进行适配
     *
     */
    public class DrawAdapter4Object implements IDrawCircle {//既能画方又能画圆
    	
    	private DrawRectangle drawRectangle;
    	public DrawAdapter4Object(DrawRectangle drawRectangle) {
    		this.drawRectangle = drawRectangle;
    	}
    	
    	@Override
    	public void drawCircle() {
    		System.out.println("DrawAdapter4Object: drawcircle");
    	}
    	
    	public void drawRectangle(String msg) {
    		drawRectangle.drawRectangle(msg);
    	} 
    	
    }


    接口适配器

    类图




    /*
     * 接口适配器:接口中有抽象方法,我们只想实现其中的几个,不想全部实现,
     * 所以提供一个默认空实现,然后继承自它,重写实现我们想实现的方法
     */
    public interface IDraw {
    	void drawCircle();
    	void drawRectangle();
    }


    /*
     * 接口适配器 的默认实现
     */
    public class DefaultDrawAdapter implements IDraw {//画方 画圆 皆为空实现
    
    	@Override
    	public void drawCircle() {
    		
    	}
    
    	@Override
    	public void drawRectangle() {
    		
    	}
    }


    public class Test {
    	public static void main(String[] args) {
    		//对象适配器
    		DrawAdapter4Object objAdapter = new DrawAdapter4Object(new DrawRectangle());
    		objAdapter.drawCircle();
    		objAdapter.drawRectangle(" in DrawAdapter4Object");
    		
    		System.out.println("--------------");
    		
    		//类适配器
    		DrawAdapter4Class clzAdapter = new DrawAdapter4Class();
    		clzAdapter.drawCircle();
    		clzAdapter.drawRectangle("in DrawAdapter4Class");
    		
    		System.out.println("--------------");
    		
    		//接口适配器
    		MyDrawAdapter myDrawAdapter = new MyDrawAdapter();
    		myDrawAdapter.drawCircle();
    		myDrawAdapter.drawRectangle();
    	}
    	
    	static class MyDrawAdapter extends DefaultDrawAdapter {
    
    		@Override
    		public void drawCircle() {
    			System.out.println("drawCircle in MyDrawAdapter");
    		}
    		
    	}
    }

    打印

    DrawAdapter4Object: drawcircle
    draw Rectangle:  in DrawAdapter4Object
    --------------
    DrawAdapter4Class: drawCircle
    draw Rectangle: in DrawAdapter4Class
    --------------
    drawCircle in MyDrawAdapter

    以上就是Java 适配器(Adapter)模式的实现方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Java 原型(Prototype)模式的代码示例 下一篇:Java 装饰者(Decorator)模式的实现案例
    PHP编程就业班

    相关文章推荐

    • Java理论基础--栈(总结分享)• 图文详解之Java实现冒泡排序• 详细介绍23种Java常见设计模式• 五种方法!Java创建多线程总结• 详细讲解Java运算符(总结分享)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网