适配器模式
【摘要】 适配器模式
平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类的方法。有一个解决方法是,修改它们各自的接口,但是这是我们最不愿意看到的。这个时候Adapter模式就会派上用场了
适配器 模式 有三种方式,一种是对象适...
适配器模式
平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类的方法。有一个解决方法是,修改它们各自的接口,但是这是我们最不愿意看到的。这个时候Adapter模式就会派上用场了
适配器 模式 有三种方式,一种是对象适配器,一种是类适配器, 一种是接口适配器
类适配器 类图
-
public class DrawRectangle {//画方
-
public void drawRectangle(String msg) {
-
System.out.println("draw Rectangle: " + msg);
-
}
-
}
-
public interface IDrawCircle {//画圆的接口
-
void drawCircle();
-
}
-
/**
-
* 类适配器 使用对象继承的方式,是静态的定义方式
-
* @author stone
-
*
-
*/
-
public class DrawAdapter4Class extends DrawRectangle implements IDrawCircle {//既能画方又能画圆
-
-
@Override
-
public void drawCircle() {
-
System.out.println("DrawAdapter4Class: drawCircle");
-
}
-
-
}
-
/**
-
* 对象适配器: 使用对象组合的方式,是动态组合的方式。
-
* 既能画方又能画圆
-
* @author stone
-
* DrawAdapter是适配器,DrawRectangle属于adapter,是被适配者,适配器将被适配者和适配目标(DrawCircle)进行适配
-
*
-
*/
-
public class DrawAdapter4Object implements IDrawCircle {//既能画方又能画圆
-
-
private DrawRectangle drawRectangle;
-
public DrawAdapter4Object(DrawRectangle drawRectangle) {
-
this.drawRectangle = drawRectangle;
-
}
-
-
@Override
-
public void drawCircle() {
-
System.out.println("DrawAdapter4Object: drawcircle");
-
}
-
-
public void drawRectangle(String msg) {
-
drawRectangle.drawRectangle(msg);
-
}
-
-
}
-
/*
-
* 接口适配器:接口中有抽象方法,我们只想实现其中的几个,不想全部实现,
-
* 所以提供一个默认空实现,然后继承自它,重写实现我们想实现的方法
-
*/
-
public interface IDraw {
-
void drawCircle();
-
void drawRectangle();
-
}
-
/*
-
* 接口适配器 的默认实现
-
*/
-
public class DefaultDrawAdapter implements IDraw {//画方 画圆 皆为空实现
-
-
@Override
-
public void drawCircle() {
-
-
}
-
-
@Override
-
public void drawRectangle() {
-
-
}
-
}
-
public class Test {
-
public static void main(String[] args) {
-
//对象适配器
-
DrawAdapter4Object objAdapter = new DrawAdapter4Object(new DrawRectangle());
-
objAdapter.drawCircle();
-
objAdapter.drawRectangle(" in DrawAdapter4Object");
-
-
System.out.println("--------------");
-
-
//类适配器
-
DrawAdapter4Class clzAdapter = new DrawAdapter4Class();
-
clzAdapter.drawCircle();
-
clzAdapter.drawRectangle("in DrawAdapter4Class");
-
-
System.out.println("--------------");
-
-
//接口适配器
-
MyDrawAdapter myDrawAdapter = new MyDrawAdapter();
-
myDrawAdapter.drawCircle();
-
myDrawAdapter.drawRectangle();
-
}
-
-
static class MyDrawAdapter extends DefaultDrawAdapter {
-
-
@Override
-
public void drawCircle() {
-
System.out.println("drawCircle in MyDrawAdapter");
-
}
-
-
}
-
}
-
DrawAdapter4Object: drawcircle
-
draw Rectangle: in DrawAdapter4Object
-
--------------
-
DrawAdapter4Class: drawCircle
-
draw Rectangle: in DrawAdapter4Class
-
--------------
-
drawCircle in MyDrawAdapter
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/50077645
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)