• 设计模式-适配器模式


    1、适配器模式简介

    定义:将一个类的接口转换成另外一个接口,使得两个接口兼容,适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些

    目标:使不能在一工作的两个接口可以兼容一起工作

    解决问题:解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的

    优点:客户端通过适配器可以透明地调用目标接口

       复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类

       将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题

       在很多业务场景中符合开闭原则

    缺点:适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性

       增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱

    实现:

    角色:目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口

       适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口

       适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者

    代码:

     1 /**类适配器模式**/
     2 public class classAdapter {
     3     /**目标接口**/
     4     public interface Target{
     5         public void request();
     6     }
     7     /**适配者**/
     8    static class Adaptee{
     9         public void specRequest(){
    10             System.out.println("适配者被调用");
    11         }
    12     }
    13     /**适配器类**/
    14     static class  adapter extends  Adaptee implements Target{
    15        @Override
    16        public void request(){
    17            specRequest();
    18        }
    19     }
    20     /**测试方法**/
    21     public static void main(String[] args) {
    22         System.out.println("开始适配器测试");
    23         Target target  = new adapter();
    24         target.request();
    25         System.out.println("测试结束");
    26     }
    27 }
    28 
    29 测试结果:
    30 开始适配器测试
    31 适配者被调用
    32 测试结束
     1 /**对象适配模式**/
     2 public class objectAdapter {
     3     /**目标接口**/
     4     public interface Target{
     5         public void request();
     6     }
     7     /**适配者**/
     8     static class Adaptee{
     9         public void specRequest(){
    10             System.out.println("适配者被调用");
    11         }
    12     }
    13     /**适配器类**/
    14     static class  objectAdaptee implements Target {
    15         private Adaptee adaptee;
    16         public objectAdaptee(Adaptee adaptee){
    17             this.adaptee = adaptee;
    18         }
    19         @Override
    20         public void request(){
    21             adaptee.specRequest();
    22         }
    23     }
    24     /**测试方法**/
    25     public static void main(String[] args) {
    26         System.out.println("开始适配器测试");
    27         Adaptee adaptee = new Adaptee();
    28         Target target = new objectAdaptee(adaptee);
    29         target.request();
    30         System.out.println("测试结束");
    31     }
    32 }
    33 
    34 测试结果:
    35 开始适配器测试
    36 适配者被调用
    37 测试结束
  • 相关阅读:
    MySQL存储过程
    [转载]JDBC应该始终以PreparedStatement代替Statement
    Restlet入门例子 RESTful web framwork for java
    Cglib的使用方法(3)Mixin
    HDOJ_1220
    精华:OracleHelper类
    web.config详解
    ADO.NET结构
    字典树
    WCF、Net remoting、Web service概念及区别
  • 原文地址:https://www.cnblogs.com/carblack/p/14109530.html
Copyright © 2020-2023  润新知