设计模式 - Adapter

Adapter 模式:

  • 将两个不相关的类组合在一起使用,需要用到Adapter模式。一个是Adaptee,一个是Adapter。

  • 实际上,两个不相关的类想要组合在一起使用, 可以修改类的接口, 但是,如果我们不想修改接口,或者根本没有源代码,就需要使用Adapter模式。

  • 有一个接口用于提供需求,一个类用于实现需求,但是需要用一个类将两者联系起来进行转换,这个转换的类就是Adapter(适配器)

实例:

  • Print 接口有两个方法,一个是输出*号修饰的字符串,一个输出<>包括的字符串。
  • Banner 类是一个拥有两个可以实现Print接口功能的方法,而我们不想修改Print接口来配合Banner的工作,所以这个时候需要使用PrintBanner类来把两者联系起来。

Print 接口:


public interface Print {
	public void printWithStar();
	public void printWithPointBracket();
}

Banner 类:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Banner {
	private String bannerName;
	private final Logger LOGGER = LoggerFactory.getLogger(Banner.class);
	public Banner(String bannerName) {
		this.bannerName = bannerName;
	}
	public void showWithStar() {
		LOGGER.info("{}","***"+ bannerName +"***");
	}
	public void showWithPointBracket() {
		LOGGER.info("{}","<<<" + bannerName + ">>>");
	}
}

PrintBanner 类:


public class PrintBanner extends Banner implements Print{
	public PrintBanner(String bannerName) {
		super(bannerName);
	}

	@Override
	public void printWithStar() {
		showWithStar();
		
	}

	@Override
	public void printWithPointBracket() {
		showWithPointBracket();
		
	}
	
}

测试用例以及结果:

public void AdapterPatternTest() {
		PrintBanner printBanner = new PrintBanner("Adapter");
		printBanner.showWithStar();
		printBanner.showWithPointBracket();
	}

16:42:12.730 [main] INFO com.zyy.admin.pojo.Banner - ***Adapter***
16:42:12.732 [main] INFO com.zyy.admin.pojo.Banner - <<<Adapter>>>

什么时候使用Adapter模式:

  • 当有一些类被测试过多册,Bug很少,这个时候我们开发一些新的接口时,可以选择复用这些类,这个时候就需要Adapter模式来把两者联系起来。
  • 版本升级时,我们把旧的代码作为Adaptee,用Adapter作为新版本。
  • 假如有一个接口需要实现一些方法,现在有一个类满足它的要求,而且已经测试完毕,Bug很少,这个时候我们有两者选择,一个是直接修改类的实现方法来满足接口的实现,另一个则是使用Adapter来承接两者。我们需要考虑到如果这个类与它关联的不只是这一个接口时,直接修改是不是会增大测试的成本,其他依赖这个类的模块会不会受影响,这样耦合度是不是太高了。所以,这个时候使用Adapter模式,我们既复用了已经测试好的类,更不会影响到与这个类关联的其他模块。
  • 如果接口的实现和类的功能完全不同,那么我们也就完全没有必要使用Adapter模式。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值