博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 实现适配器(Adapter)模式
阅读量:5223 次
发布时间:2019-06-14

本文共 2465 字,大约阅读时间需要 8 分钟。

平时我们会常常碰到这种情况,有了两个现成的类,它们之间没有什么联系。可是我们如今既想用当中一个类的方法。同一时候也想用另外一个类的方法。有一个解决方法是。改动它们各自的接口。可是这是我们最不愿意看到的。这个时候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: drawcircledraw Rectangle:  in DrawAdapter4Object--------------DrawAdapter4Class: drawCircledraw Rectangle: in DrawAdapter4Class--------------drawCircle in MyDrawAdapter

posted on
2017-06-23 19:34 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/mthoutai/p/7071461.html

你可能感兴趣的文章
WSDL 详解
查看>>
[转]ASP数组全集,多维数组和一维数组
查看>>
C# winform DataGridView 常见属性
查看>>
逻辑运算和while循环.
查看>>
Nhiberate (一)
查看>>
c#后台计算2个日期之间的天数差
查看>>
安卓开发中遇到的小问题
查看>>
ARTS打卡第3周
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>
桥接模式-Bridge(Java实现)
查看>>
svn客户端清空账号信息的两种方法
查看>>
springboot添加servlet的两种方法
查看>>
java的Array和List相互转换
查看>>
layui父页面执行子页面方法
查看>>
如何破解域管理员密码
查看>>
Windows Server 2008 R2忘记管理员密码后的解决方法
查看>>
IE11兼容IE8的设置
查看>>