适配器模式
介绍:
适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。包含以下三个角色:
- Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。在类适配器中,由于C#语言不支持多重继承,所以它只能是接口。
- Adapter(适配器类):它可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。它是适配器模式的核心。
- Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类包好了客户希望的业务方法。
举例:
一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle),线对象(Line)都支持Draw()函数,即可以通过Draw()函数绘制图形。为了加快项目进度,将角度对象(Angle)绘制功能交给了合作团队实现。但合作团队将角度对象绘制函数定为了DrawAngle()。绘图系统提供给用户后,用户不满意,希望能统一的调用,不用记太多命令。应用适配器模式,用JAVA控制台应用程序完善该设计。绘制该模式的UML图。
package adapter;
public interface Draw {
void draw();
}
package adapter;
//圆形
public class Circle implements Draw{
@Override
public void draw() {
System.out.println("draw a Circle!");
}
}
package adapter;
//矩形
public class Rectangle implements Draw{
@Override
public void draw() {
System.out.println("draw a Rectangle!");
}
}
package adapter;
//线段
public class Line implements Draw{
@Override
public void draw() {
System.out.println("draw a Line!");
}
}
package adapter;
//角度
public class Angle{
public void drawAngle(){
System.out.println("draw an Angle!");
}
}
package adapter;
//角度适配器类
public class AngleAdapter implements Draw {
private Angle angle;
public AngleAdapter(Angle angle){
this.angle = angle;
}
@Override
public void draw() {
angle.drawAngle();
}
}
package adapter;
//测试类
public class Test {
public static void main(String[] args) {
Circle circle = new Circle();
Rectangle rectangle = new Rectangle();
Line line = new Line();
Angle angle = new Angle();
AngleAdapter angleAdapter = new AngleAdapter(angle);
circle.draw();
rectangle.draw();
line.draw();
angleAdapter.draw();
}
}