Java 实现适配器(Adapter)模式

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

Java 实现适配器(Adapter)模式的相关文章

java演示适配器(adapter)模式

为什么要使用模式: 模式是一种做事的一种方法,也即实现某个目标的途径,或者技术. adapter模式的宗旨就是,保留现有类所提供的服务,向客户提供接口,以满足客户的需求. 类适配器:客户端定义了接口并实现了这个接口,这个接口中的方法在自己的类库中有更好的实现方式,但是方法名不一样,不能为用户所用,可以定义一个类实现这个接口,这个接口中的方法可以委托给自己类库中的方法实现效果,以满足客户的需求.这种方式叫做接口适配. // 已存在的.具有特殊功能.但不符合我们既有的标准接口的类 class Ada

设计模式--适配器(Adapter)模式

今天学习另一个设计模式,适配器(Adapter)模式,这是一个共同方向,但有特殊要求,就应用到此设计模式.写到这里,想起很久以前,有写过一篇<ASP.NET的适配器设计模式(Adapter)>http://www.cnblogs.com/insus/archive/2013/02/04/2891426.html ,但是似乎没有适配器的味道. 比如一个系统,开发时设计好各种权限,但某一种,客户提出要求,需要一个特殊的权限来操作.只好开发一个适配器来让其有这个特殊操作权限. 用代码来举例吧. 先定

Java适配器模式(Adapter模式)

适配器模式定义:将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用适配器模式 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口. 怎么办? 使用Adapter,在这两种接口之间创建一个混合接口(混血儿). 如何使用适配器模式 实现Adapter方式,其实"think in Java"的"类再生&quo

Java设计模式 —— 适配器(Adapter)

# 标签: 读博客 Adapter Pattern / Wrapper Pattern 什么时候需要适配,需要包装?肯定是你给我的,现有的服务提供的不好用,我才需要给你进行一下包装再用,或者适配之后再用. Android中,数据的list能直接放到view上面么?不能吧,所以搞了个adapter适配一下,变成了一个封装类,这个封装类是可以安在view上,或者说给view提供数据源的. 你笔记本电脑需要12V的直流电,但是你家里只有220V交流电或者110V交流电,所提供的,并不是所需的,不能直接

Adapter(适配器)模式

1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化.  例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器.可以使用这个电源适配器充电.这个iphone的电源适配器就是类似我们说的适配器模式.(电源适配器就是把电源变成需要的电压,也就是适配器的作用是使得一个东西适合另外一个东西.)  例子2:最典型的例

打造炫酷通用的ViewPager指示器 - Adapter模式适配所有

1.概述 上一期我们已经写了一篇 打造炫酷通用的ViewPager指示器 - 玩转字体变色 可是这种效果虽然绚烂可以装装A和C之间,但是在实际的大多数效果中并不常见,只是在内涵段子中有这个效果而已,那么这一期我们就用Adapter适配器模式适配所有的效果,堪称终结者.附视频地址:等这个周末吧 2.效果实现 2.1 整合上一个实例: 我还是还是拿上一个实例来做演示吧.这里我贴几种常见的效果,首先声明Android自带的有这个控件叫TabLayout,大家可以自己用用试试看好用不?我也用过但是不做任

Android 适配器(Adapter)、观察者(Observer) 模式

适配器(Adapter)详述:http://blog.csdn.net/jjwwmlp456/article/details/39893723 观察者(Observer)详述:http://blog.csdn.net/jjwwmlp456/article/details/39967021 AdapterView 体系 AdapterView中会使用Adapter Adapter 体系 BaseAdapter 实现了 SpinnerAdapter.ListAdapter 这样的形式,就是 适配器模

设计模式模式适配器(Adapter)摘录

23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助建立一个系统,是独立于如何.这是一个这些对象和陈述的组合.创建使用继承一个类架构更改实例,一个对象类型模型的建立也将委托实例化一个对象. 断出现的主旋律.第一,它们都将关于该系统使用哪些详细的类的信息封装起来. 第二.它们隐藏了这些类的实例是怎样被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口. 因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以及何时创建这些方面给予了

Java读源码学设计模式:适配器Adapter

适配器模式相关源码:slf4j-1.6.1.hibernate-3.6.7 大家都知道,log4j是一个广泛使用的日志工具,除此之外,sun公司在JDK中也有自己的日志工具,也就是java.util.logging.Logger.当然还有其他一些日志工具. 多种日志工具功能和使用方式类似,一般都包含debug.info.warn.error等日志级别的方法,但却没有实现共同的接口.这一点不像JDBC,虽然关系型数据库种类很多,例如MySQL.Oracle等,但是有一套统一的接口,也就是JDBC.