zoukankan      html  css  js  c++  java
  • 设计模式之Adapter设计模式

     这个设计模式是我这两天刚学的,这儿算是我的读书笔记发布出来是供大家一起学习,后面有我自己的感悟,下面是我网上整理的

     

    以下情况使用适配器模式
    • 你想使用一个已经存在的类,而它的接口不符合你的需求。
    • 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
    • (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
     

    其实现方式主要有两种:
    类适配器


     

    对象适配器

    其中:
    • Target
    — 定义Client使用的与特定领域相关的接口。
    • Client
    — 与符合Ta rg e t接口的对象协同。
    • Adaptee
    — 定义一个已经存在的接口,这个接口需要适配。
    • Adapter
    — 对Adaptee的接口与Target接口进行适配


    具体的实现代码如下:
    类适配器

    1. package com.visionsky.DesignPattern; 
    2.  
    3. interface Target { 
    4.     void Request(); 
    5.  
    6. class Adaptee { 
    7.     void SpecificRequst() { 
    8.         System.out.println("Adaptee's SpecificRequst"); 
    9.     } 
    10.  
    11. class Adapter extends Adaptee implements Target  
    12.  
    13.     @Override 
    14.     public void Request() { 
    15.          System.out.println("Adapter's Request"); 
    16.           super.SpecificRequst(); 
    17.     } 
    18.  
    19.  
    20. public class AdapterDemo { 
    21.  
    22.     /** 
    23.      * @param args 
    24.      */ 
    25.     public static void main(String[] args) { 
    26.         // TODO Auto-generated method stub 
    27.         Target t=new Adapter(); 
    28.         t.Request(); 
    29.     } 
    30.  
    31. }
    32. //我的点评:类适配器存在不灵活的地方因为他为了实现Adaptee 里的特殊需求而使用了继承,我们知道继承在OO里其实破坏了类的封装性,这里如果被继承的类Adaptee 改动一下那么Adapter类也会随之改变这就破坏了OO里的原则破坏 了类的封装性
    33. //而如果使用下面的对象适配器的话就不会出现这个问题,上面是完全写死了的一种适配器不灵活,而下面你其实也可以通过传入一个你需要适配的类型参数(使用泛T)如Adaptee 的类型然后使用反射动态创建出该类型的实例,使用现在流行的T4模板还可以创建出多种不同需求的适配器类型。

     对象适配器

    1. package com.visionsky.DesignPattern; 
    2.  
    3. interface Target { 
    4.     void Request(); 
    5.  
    6. class Adaptee { 
    7.     void SpecificRequst() { 
    8.         System.out.println("Adaptee's SpecificRequst"); 
    9.     } 
    10.  
    11. class Adapter  implements Target  
    12.  
    13.     private Adaptee adaptee; 
    14.     public Adapter() 
    15.     { 
    16.         this.adaptee=new Adaptee(); 
    17.     } 
    18.      
    19.     @Override 
    20.     public void Request() { 
    21.          System.out.println("Adapter's Request"); 
    22.          adaptee.SpecificRequst(); 
    23.     } 
    24.  
    25.  
    26. public class AdapterDemo { 
    27.  
    28.     /** 
    29.      * @param args 
    30.      */ 
    31.     public static void main(String[] args) { 
    32.         // TODO Auto-generated method stub 
    33.         Target t=new Adapter(); 
    34.         t.Request(); 
    35.     } 
    36.  

    生活中的例子:
    在生活中最简单的例子就是电源适配器,如手机适配器,我们的家用电源是220V的,但是,对于手机来说,根本大不了这么多,所以,在这种情况下,需要电源适配器来为我们提供适合手机的电压。
     

    1. package com.visionsky.DesignPattern; 
    2.  
    3. public class AdaterDemoInLife { 
    4.  
    5.     /** 
    6.      * @param args 
    7.      */ 
    8.     public static void main(String[] args) { 
    9.         // TODO Auto-generated method stub 
    10.         MobilePowerAdapter mpa=new MobilePowerAdapter(); 
    11.         mpa.GetPower10V(); 
    12.     } 
    13.  
    14.  
    15. interface ITarget { 
    16.     int GetPower10V(); 
    17.  
    18. class Power { 
    19.     int GetPower220V() { 
    20.          return 220
    21.     } 
    22.  
    23. class MobilePowerAdapter  implements ITarget  
    24.     private Power power; 
    25.     public MobilePowerAdapter( ) { 
    26.           
    27.         this.power = new Power(); 
    28.     } 
    29.      
    30.     @Override 
    31.     public int GetPower10V() { 
    32.         // TODO Auto-generated method stub 
    33.          power.GetPower220V(); 
    34.          //将220v转变成10v,具体做法就不写了, 大家明白就行 
    35.          return 10
    36.     } 

    本文出自 “学习笔记” 博客,请务必保留此出处http://visionsky.blog.51cto.com/733317/384607

    分享至
    更多 0
    一键收藏,随时查看,分享好友!
    0人
    了这篇文章
    类别:设计模式┆阅读(2461)┆评论(2) ┆ 返回博主首页返回博客首页
  • 相关阅读:
    [转]ASP.NET生成HTML初级解决方案
    HTTPContentTypes 大全
    CSS美化 input type=”file” 兼容所有浏览器
    页面前端的水有多深?再议页面开发(转)
    jQuery对select、checkbox、radio操作小结
    jQuery 跟随浏览器窗口的回到顶部按钮gototop(转)
    下载apachetomcat9.0.17windowsx64及安装以及用途
    J2SE基本安装和java的环境变量
    java简单的运算符和表达式
    关于类的成员,public,private修饰符
  • 原文地址:https://www.cnblogs.com/kexb/p/3666334.html
Copyright © 2011-2022 走看看