分类 标签 存档 订阅 搜索

设计模式(单接口适配器模式)- 简化代码的一种方式

269 浏览0 评论

单接口适配器模式是为了让子类实现时屏蔽掉不关心的方法,在子类、适配器、接口之间做一次过渡。比如子类想实现接口中某一个方法,但是接口中方法不止一个,此刻编译器强制子类必须实现该接口的所有方法,这显然是麻烦、不必要且不优雅的。那么此时选择单接口适配器模式则是一种解决方案。


怎么做? 其实特别简单:

就是写一个类,实现某接口,给出默认实现。
其实在JDK8的语法中已经给出了默认实现的方式,就是使用default关键字。可以说也是一种解决方案,看个人喜好选用。如果低于该版本,则还是选择用适配器吧。

代码示例:

以下代码展示了对spring中org.springframework.core.env.Environment的适配,目的是为了让子类在实现该接口时不必再去实现所有的接口。

public class EnvironmentAdapter implements Environment{

	
	@Autowired
	Environment environment;
	

	@Override
	public boolean containsProperty(String key) {
		return environment.containsProperty(key);
	}

	
	@Override
	public String getProperty(String key) {
		return environment.getProperty(key);
	}

	
	@Override
	public String getProperty(String key, String defaultValue) {
		return environment.getProperty(key, defaultValue);
	}

	
	@Override
	public <T> T getProperty(String key, Class<T> targetType) {
		return environment.getProperty(key, targetType);
	}

	
	@Override
	public <T> T getProperty(String key, Class<T> targetType, T defaultValue) {
		return environment.getProperty(key, targetType, defaultValue);
	}

	
	@Override
	public <T> Class<T> getPropertyAsClass(String key, Class<T> targetType) {
		return environment.getPropertyAsClass(key, targetType);
	}

	@Override
	public String getRequiredProperty(String key) throws IllegalStateException {
		return environment.getRequiredProperty(key);
	}


	@Override
	public <T> T getRequiredProperty(String key, Class<T> targetType)
			throws IllegalStateException {
		return environment.getRequiredProperty(key, targetType);
	}

	
	@Override
	public String resolvePlaceholders(String text) {
		return environment.resolvePlaceholders(text);
	}

	
	@Override
	public String resolveRequiredPlaceholders(String text)
			throws IllegalArgumentException {
		return environment.resolveRequiredPlaceholders(text);
	}

	
	@Override
	public String[] getActiveProfiles() {
		return environment.getActiveProfiles();
	}

	
	@Override
	public String[] getDefaultProfiles() {
		return environment.getDefaultProfiles();
	}

	
	@Override
	public boolean acceptsProfiles(String... profiles) {
		return environment.acceptsProfiles(profiles);
	}

}

这样子类继承它,重写需要的方法即可。

结论

单接口适配器:就是实现了某接口的类,并对接口中每个方法给出了一个默认实现。
使用场景:简化代码。


评论  
留下你的脚步
推荐阅读