Home >Java >javaTutorial >How to implement Java Adapter pattern

How to implement Java Adapter pattern

黄舟
黄舟Original
2017-03-10 11:57:021701browse

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);
	}
}
public interface IDrawCircle {//画圆的接口
	void drawCircle();
}
/**
 * 类适配器 使用对象继承的方式,是静态的定义方式
 * @author stone
 *
 */
public class DrawAdapter4Class extends DrawRectangle implements IDrawCircle {//既能画方又能画圆

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

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);
	} 
	
}


Interface Adapter

Class Diagram



##

/*
 * 接口适配器:接口中有抽象方法,我们只想实现其中的几个,不想全部实现,
 * 所以提供一个默认空实现,然后继承自它,重写实现我们想实现的方法
 */
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");
		}
		
	}
}

Print

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

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:
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