【Java设计模式】适配器模式

我不是女神ヾ 2022-12-12 01:51 146阅读 0赞

一、设计原则

  • 开闭原则(Open Close Principle)
  • 里氏代换原则(Liskov Substitution Principle)
  • 依赖倒转原则(Dependence Inversion Principle)
  • 接口隔离原则(Interface Segregation Principle)
  • 单一职责原则(Single Responsibility Principle)
  • 最少知道原则(Demeter Principle)
  • 合成复用原则(Composite Reuse Principle)

参考:
1、设计原则概念
2、23设计原则示例+讲解

二、适配器模式

场景:
假设现在你处于中国使用国标充电器进行充电、这时你需要使用一个国标充电的接口(协议、契约)+实现接口(满足协议)的国标充电类,然后再设一个此场景的类进行使用此充电器进行充电;

此后,你有了一个iphone需要英标的充电器进行充电,国标无法满足,此时就需要一个适配器来进行转换(相当于桥梁的作用),那么怎么做呢??
第一步:获取英标的协议
第二步:来一个英标的充电器(实现协议)
第三步:进行适配 (实现国标协议的适配类,那么和国标的充电器类有什么区别呢,那就是需要将国标充电的方法重写为英标的充电方法)

示例代码:

  1. package com.company.adapterpattern;
  2. // 国标的充电协议(接口)
  3. interface CnPluginInterface{
  4. void chargeWith2Pins();
  5. }
  6. // 国标充电(原有的)
  7. class CnPlugin implements CnPluginInterface{
  8. @Override
  9. public void chargeWith2Pins() {
  10. System.out.println("charge with CnPlugin..");
  11. }
  12. }
  13. // 在中国家里进行充电
  14. class Home{
  15. //
  16. private CnPluginInterface cnPlugin;
  17. public Home(){ }
  18. public Home(CnPluginInterface cnPlugin){
  19. this.cnPlugin= cnPlugin;
  20. }
  21. public void setPlugin(CnPluginInterface cnPlugin){
  22. this.cnPlugin = cnPlugin;
  23. }
  24. public void charge(){
  25. //用国标进行充电
  26. cnPlugin.chargeWith2Pins();;
  27. }
  28. }
  29. // 适配器
  30. interface EnPluginInterface{
  31. void chargeWith3pins();
  32. }
  33. class EnPlugin implements EnPluginInterface{
  34. @Override
  35. public void chargeWith3pins() {
  36. System.out.println("charge with EnPlugin");
  37. }
  38. }
  39. //进行对cn接口的适配
  40. class cnPluginAdapter implements CnPluginInterface{
  41. private EnPluginInterface enPlugin;
  42. public cnPluginAdapter(EnPluginInterface enPlugin){
  43. this.enPlugin= enPlugin;
  44. }
  45. @Override
  46. public void chargeWith2Pins() {
  47. enPlugin.chargeWith3pins();
  48. }
  49. }
  50. public class CnTest {
  51. public static void main(String[]args){
  52. // 进行国标充电
  53. CnPluginInterface cnPlugin = new CnPlugin();
  54. Home home = new Home();
  55. home.setPlugin(cnPlugin);
  56. home.charge();
  57. // 进行适配之后
  58. EnPluginInterface enPlugin = new EnPlugin();
  59. cnPluginAdapter pluginAdapter = new cnPluginAdapter(enPlugin);
  60. home.setPlugin(pluginAdapter);
  61. home.charge();
  62. }
  63. }
  64. /* 场景: 在家中充电需要使用二插座进行充电; 但现在需要使用英标进行充电就需要一个适配器进行转换充电(英标就是一个过渡的适配) 二插座充电:二插座协议、二插座充电、home类 三插座:三插座协议和充电类、适配器进行二插座到三插座过渡适配(也就是对应的方法重写) */

发表评论

表情:
评论列表 (有 0 条评论,146人围观)

还没有评论,来说两句吧...

相关阅读