设计模式-适配器模式

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 测试结束
posted @ 2020-12-10 16:37  CarBlack  阅读(104)  评论(0编辑  收藏  举报