适配器模式

举报
chenyu 发表于 2021/07/27 00:26:19 2021/07/27
【摘要】 适配器模式          平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类的方法。有一个解决方法是,修改它们各自的接口,但是这是我们最不愿意看到的。这个时候Adapter模式就会派上用场了 适配器 模式 有三种方式,一种是对象适...

适配器模式

         平时我们会经常碰到这样的情况,有了两个现成的类,它们之间没有什么联系,但是我们现在既想用其中一个类的方法,同时也想用另外一个类的方法。有一个解决方法是,修改它们各自的接口,但是这是我们最不愿意看到的。这个时候Adapter模式就会派上用场了

适配器 模式 有三种方式,一种是对象适配器,一种是类适配器, 一种是接口适配器

类适配器 类图



  
  1. public class DrawRectangle {//画方
  2. public void drawRectangle(String msg) {
  3. System.out.println("draw Rectangle: " + msg);
  4. }
  5. }

  
  1. public interface IDrawCircle {//画圆的接口
  2. void drawCircle();
  3. }


  
  1. /**
  2. * 类适配器 使用对象继承的方式,是静态的定义方式
  3. * @author stone
  4. *
  5. */
  6. public class DrawAdapter4Class extends DrawRectangle implements IDrawCircle {//既能画方又能画圆
  7. @Override
  8. public void drawCircle() {
  9. System.out.println("DrawAdapter4Class: drawCircle");
  10. }
  11. }



  
  1. /**
  2. * 对象适配器: 使用对象组合的方式,是动态组合的方式。
  3. * 既能画方又能画圆
  4. * @author stone
  5. * DrawAdapter是适配器,DrawRectangle属于adapter,是被适配者,适配器将被适配者和适配目标(DrawCircle)进行适配
  6. *
  7. */
  8. public class DrawAdapter4Object implements IDrawCircle {//既能画方又能画圆
  9. private DrawRectangle drawRectangle;
  10. public DrawAdapter4Object(DrawRectangle drawRectangle) {
  11. this.drawRectangle = drawRectangle;
  12. }
  13. @Override
  14. public void drawCircle() {
  15. System.out.println("DrawAdapter4Object: drawcircle");
  16. }
  17. public void drawRectangle(String msg) {
  18. drawRectangle.drawRectangle(msg);
  19. }
  20. }


  
  1. /*
  2. * 接口适配器:接口中有抽象方法,我们只想实现其中的几个,不想全部实现,
  3. * 所以提供一个默认空实现,然后继承自它,重写实现我们想实现的方法
  4. */
  5. public interface IDraw {
  6. void drawCircle();
  7. void drawRectangle();
  8. }


  
  1. /*
  2. * 接口适配器 的默认实现
  3. */
  4. public class DefaultDrawAdapter implements IDraw {//画方 画圆 皆为空实现
  5. @Override
  6. public void drawCircle() {
  7. }
  8. @Override
  9. public void drawRectangle() {
  10. }
  11. }


  
  1. public class Test {
  2. public static void main(String[] args) {
  3. //对象适配器
  4. DrawAdapter4Object objAdapter = new DrawAdapter4Object(new DrawRectangle());
  5. objAdapter.drawCircle();
  6. objAdapter.drawRectangle(" in DrawAdapter4Object");
  7. System.out.println("--------------");
  8. //类适配器
  9. DrawAdapter4Class clzAdapter = new DrawAdapter4Class();
  10. clzAdapter.drawCircle();
  11. clzAdapter.drawRectangle("in DrawAdapter4Class");
  12. System.out.println("--------------");
  13. //接口适配器
  14. MyDrawAdapter myDrawAdapter = new MyDrawAdapter();
  15. myDrawAdapter.drawCircle();
  16. myDrawAdapter.drawRectangle();
  17. }
  18. static class MyDrawAdapter extends DefaultDrawAdapter {
  19. @Override
  20. public void drawCircle() {
  21. System.out.println("drawCircle in MyDrawAdapter");
  22. }
  23. }
  24. }


  
  1. DrawAdapter4Object: drawcircle
  2. draw Rectangle: in DrawAdapter4Object
  3. --------------
  4. DrawAdapter4Class: drawCircle
  5. draw Rectangle: in DrawAdapter4Class
  6. --------------
  7. drawCircle in MyDrawAdapter


文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/50077645

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。