Home Java javaTutorial How to implement Java Adapter pattern

How to implement Java Adapter pattern

Mar 10, 2017 am 11:57 AM

We often encounter this situation. We have two ready-made classes and there is no connection between them, but now we want to use the method of one class and the method of the other class. One solution is to modify their respective interfaces, but this is the last thing we want to see. At this time, the Adapter mode will come in handy

The adapter mode has three methods, one is the object adapter, the other is the class adapter, and the other is the interface adapter

The following examples illustrate:

Class adapter class diagram



##

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

	@Override
	public void drawCircle() {
		System.out.println("DrawAdapter4Class: drawCircle");
	}
	
}
Copy after login

Object adapter class diagram:


/**
 * 对象适配器: 使用对象组合的方式,是动态组合的方式。
 * 既能画方又能画圆
 * @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);
	} 
	
}
Copy after login


Interface Adapter

Class Diagram



##

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

/*
 * 接口适配器 的默认实现
 */
public class DefaultDrawAdapter implements IDraw {//画方 画圆 皆为空实现

	@Override
	public void drawCircle() {
		
	}

	@Override
	public void drawRectangle() {
		
	}
}
Copy after login

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");
		}
		
	}
}
Copy after login

Print

DrawAdapter4Object: drawcircle
draw Rectangle:  in DrawAdapter4Object
--------------
DrawAdapter4Class: drawCircle
draw Rectangle: in DrawAdapter4Class
--------------
drawCircle in MyDrawAdapter
Copy after login

The above is the detailed content of How to implement Java Adapter pattern. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Square Root in Java Square Root in Java Aug 30, 2024 pm 04:26 PM

Square Root in Java

Perfect Number in Java Perfect Number in Java Aug 30, 2024 pm 04:28 PM

Perfect Number in Java

Random Number Generator in Java Random Number Generator in Java Aug 30, 2024 pm 04:27 PM

Random Number Generator in Java

Armstrong Number in Java Armstrong Number in Java Aug 30, 2024 pm 04:26 PM

Armstrong Number in Java

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Weka in Java

Smith Number in Java Smith Number in Java Aug 30, 2024 pm 04:28 PM

Smith Number in Java

Java Spring Interview Questions Java Spring Interview Questions Aug 30, 2024 pm 04:29 PM

Java Spring Interview Questions

Break or return from Java 8 stream forEach? Break or return from Java 8 stream forEach? Feb 07, 2025 pm 12:09 PM

Break or return from Java 8 stream forEach?

See all articles