zoukankan      html  css  js  c++  java
  • 适配器模式

    适配器模式

    适配器模式可以把一个类的接口变换成客户端所期待的另一种接口,使得原本因接口不匹配而无法一起工作的两个类可以一起工作。

    适配器模式的用途,在网上找了一幅图,挺形象的:

    比方说我有一个台灯,其插头是标准的两相的交流电插头,即阳极、阴极。我旅游到了一个地方想用自己的台灯,但发现旅馆里面只有三相的插头,即在阳极、阴极的基础上还多了一个地级。这时候怎么办呢,一个两相到三相的转换器(适配器)就能解决这个问题了,而这正是本模式所做的事情。

    适配器分两种,类适配器和对象适配器。类适配器是把适配的类的api转换成目标类的api,涉及的角色:

    1.目标角色

    希望得到的接口

    2.源角色

    需要适配的接口

    3.适配器角色

    模式的核心,适配器把原借款转换为目标接口

    类适配器实例

    目标接口

    1 public interface ClassTarget {
    2     public void sampleOperation1();
    3     
    4     public void sampleOperation2();
    5 }

    源角色

    1 public class ClassAdaptee
    2 {
    3     public void sampleOperation1(){}
    4 }

    适配器角色

    1 public class ClassAdapter extends ClassAdaptee implements ClassTarget
    2 {
    3     public void sampleOperation2()
    4     {
    5         // 相关代码
    6     }    
    7 }

    对象适配器实例

    目标接口

    1 public interface ObjectTarget
    2 {
    3     public void sampleOperation1();
    4     
    5     public void sampleOperation2();
    6 }

    源角色

    1 public class ObjectAdaptee
    2 {
    3     public void sampleOperation1(){}
    4 }

    对象适配器采用了委派关系将源角色和适配器角色关联

     1 public class ObjectAdapter
     2 {
     3     private ObjectAdaptee objectAdaptee;
     4     
     5     public ObjectAdapter(ObjectAdaptee objectAdaptee)
     6     {
     7         this.objectAdaptee = objectAdaptee;
     8     }
     9     
    10     public void sampleOperation1()
    11     {
    12         this.objectAdaptee.sampleOperation1();
    13     }
    14     
    15     public void sampleOperation2(){}
    16 }

    适配器的核心就是把一个类的接口转换成客户端期待的另一种接口。

    适配器模式的优缺点

    优点

    1.有更好的复用性

    2.有更好的扩展性

    缺点

    过多使用适配器会使系统凌乱,因此除非必要,不推荐使用适配器,而是直接对系统重构。 

  • 相关阅读:
    【bzoj3774】最优选择 网络流最小割
    【bzoj3697】采药人的路径 树的点分治
    【bzoj3576】[Hnoi2014]江南乐 博弈论+SG定理+数学
    【bzoj3451】Tyvj1953 Normal 期望+树的点分治+FFT
    【bzoj2906】颜色 分块
    【bzoj5028】小Z的加油店 扩展裴蜀定理+差分+线段树
    【bzoj2257】[Jsoi2009]瓶子和燃料 扩展裴蜀定理+STL-map
    【bzoj4542】[Hnoi2016]大数 莫队算法
    【bzoj4182】Shopping 树的点分治+dfs序+背包dp
    【bzoj2560】串珠子 状压dp+容斥原理
  • 原文地址:https://www.cnblogs.com/tp123/p/6493059.html
Copyright © 2011-2022 走看看