设计模式(二): Adapter模式(适配器模式)

适配器模式

1.类适配器模式(继承)

基础类,提供printWithParen()方法来打印带()的内容,提供printWithAster()方法来提供带*号的内容:
Banner.java

public class Banner {

	private String show;

	public Banner(String show) {
		this.show = show;
	}

	// 打印加括号
	public void printWithParen() {
		System.out.println("(" + show + ")");
	}

	// 打印加*号
	public void printWithAster() {
		System.out.println("*" + show + "*");
	}

}

现在的需求是要提供printWeak和printStrong方法分别打印括号和星号。
Print.java

/**
 * 需求接口,要一个printWeak和printStrong分别打印括号和星号
 */
public interface Print {

	// 打印()
	void printWeak();
	
	// 打印*
	void printStrong();

}

适配器类,printWeak,printStrong方法使用printWithParen,printWithAster方法来实现。
所以通过继承来获取Banner 中printWithParen,printWithAster方法,并 实现Print 接口,实现printWeak,printStrong方法。
PrintBanner.java

// 适配器类,继承Banner类获得printWithParen、printWithAster方法,实现Print接口,实现需求 提供适配
public class PrintBanner extends Banner implements Print{

	public PrintBanner(String show) {
		// 父类构造器 即Banner类的构造器
		super(show);
	}

	@Override
	public void printWeak() {
		// 继承的方法
		printWithParen();
	}

	@Override
	public void printStrong() {
		// 继承的方法
		printWithAster();
	}
	
}

测试类:

@Test
public void test() {
	Print p = new PrintBanner("demo");
	p.printWeak();
	p.printStrong();
}

控制台打印:

(demo)
*demo*

Print p = new PrintBanner(“demo”),面向Print接口编程,printWeak,printStrong方法的实现,对于调用者完全隐藏。

委托适配器模式(对象)

上面的示例是通过调用 继承的来的printWithParen,printWithAster方法来实现的。也可以 通过具体对像来调用。
Banner.java

public class Banner {

	private String show;

	public Banner(String show) {
		this.show = show;
	}

	public void printWithParen() {
		System.out.println("(" + show + ")");
	}
	
	public void printWithAster() {
		System.out.println("*" + show + "*");
	}

}

Print.java

public interface Print {

	void printStrong();

	void printWeak();
}

PrintBanner.java

// 实现接口方式,不需要继承
public class PrintBanner implements Print {
	
	// 对象实例
	private Banner banner;
	
	public PrintBanner(String show) {
		this.banner = new Banner(show);
	}
	

	@Override
	public void printStrong() {
		banner.printWithParen();		
	}

	@Override
	public void printWeak() {
		banner.printWithAster();
	}

}

测试:

@Test
public void test() {
	Print print = new PrintBanner("hello");
	print.printStrong();
	print.printWeak();
}

控制台打印 :

(hello)
*hello*

记录

Adapter模式会对现有的类进行适配,生成新的类。通过该模式可以很方便的创建我们需要的方法群 。不改变原有类,生成新的类。Adapter模式填补具有不同接口的两个类之间的缝隙。角色功能完全不同则不能使用Adapter模式。

猜你喜欢

转载自blog.csdn.net/qq122516902/article/details/85560043