主页传送门: 传送
适配器模式(Strategy Pattern) 又叫做变压器模式,是一种常用的设计模式。其定义如下:
Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.
即:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
其通用类图如下:
在适配器模式中是涉及到三个角色:
用适配器模式(Adapter)模拟火箭队比赛,教练暂停时给后卫、中锋、前锋分配进攻和防守的方法。
抽象球员类
/**
* 抽象球员类
*/
public abstract class Player {
/**
* 球员名字
*/
protected String name;
public Player(String name) {
this.name = name;
}
/**
* 进攻方法
*/
public abstract void attack();
/**
* 防守方法
*/
public abstract void defense();
}
前锋
/**
* 前锋
*/
public class Forwards extends Player {
public Forwards(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("前锋「0」进攻 " + name);
}
@Override
public void defense() {
System.out.println("前锋「0」防守 " + name);
}
}
中锋
/**
* 中锋
*/
public class Center extends Player {
public Center(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("中锋「0」进攻 " + name);
}
@Override
public void defense() {
System.out.println("中锋「0」防守 " + name);
}
}
后卫
/**
* 后卫
*/
public class Guards extends Player {
public Guards(String name) {
super(name);
}
@Override
public void attack() {
System.out.println("后卫「0」进攻 " + name);
}
@Override
public void defense() {
System.out.println("后卫「0」防守 " + name);
}
}
外籍中锋
/**
* 外籍中锋
*/
public class ForeignCenter {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void attackForeign() {
System.out.println("外籍中锋「0」进攻 " + name);
}
public void defenseForeign() {
System.out.println("外籍中锋「0」防守 " + name);
}
}
翻译者
/**
* 翻译者
*/
public class Translator extends Player {
// 申明并实例化一个内部"外籍中锋"对象,表明翻译者与外籍球员有关联
private ForeignCenter foreignCenter = new ForeignCenter();
public Translator(String name) {
super(name);
}
/**
* 翻译者将"attack"翻译为"进攻"告诉外籍中锋
*/
@Override
public void attack() {
foreignCenter.attackForeign();
}
/**
* 翻译者将"defense"翻译为"防守"告诉外籍中锋
*/
@Override
public void defense() {
foreignCenter.defenseForeign();
}
}
客户端类
public class Client {
public static void main(String[] args) {
Player forwards = new Forwards("巴蒂尔");
forwards.attack();
Player center = new Center("科比");
center.attack();
Player guards = new Guards("詹姆斯");
guards.attack();
// 翻译者
Translator translator = new Translator("姚明");
translator.attack();
translator.defense();
}
}
适配器模式的优点主要包括:
而适配器模式的缺点为:
适配器模式的使用场景包括:
适配器模式是一种结构型设计模式,它允许将一个类的接口转换成客户所期待的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。
适配器模式有四种类型,包括类适配器模式、对象适配器模式、缺省适配器模式和双向适配器模式。类适配器模式通过继承目标抽象类实现目标接口,对象适配器模式通过实现目标接口维持对适配者的引用。缺省适配器模式选择性实现部分抽象方法,双向适配器模式在维持对目标类的引用同时也维持对适配者的引用。
总之,适配器模式是一种非常实用的设计模式,通过它可以将不兼容的接口转换成客户所期待的接口,使得不同的类可以协同工作。
如果喜欢的话,欢迎 关注 点赞 评论 收藏 一起讨论
你的支持就是我✍️创作的动力!