zoukankan      html  css  js  c++  java
  • 【设计模式】适配器模式

    使用频率:★★★★☆

    一、什么是适配器

    适配器是将一种接口改造成另外一种接口的一个包装类;

    二、补充说明

    有两种实现方式,一种是通过继承,另外一种通过组合;

    使用组合实现的时候,跟装饰者模式有点类似,不过侧重点不同,装饰者模式是给对象增加新行为,适配器是为了适配接口;

    优点:符合开闭原则;适配者类和目标类解耦;代码复用;

    三、角色

    目标接口

    适配器类

    适配者类

    使用者

    四、例子,JAVA实现

    简介:现有一个USB接口和一个PSP接口实现类,功能都是进行充电,该例子的目的就是对PSP接口实现类进行包装,使之能用USB接口充电;

    目标接口,使用USB接口充电

    package com.pichen.dp.structuralpattern;
    
    public interface IUSB {
    	
    	public void charge();
    	
    }
    

     一个USB接口的实现类(该类不属于适配器模式中的角色,只是一个对比)

    package com.pichen.dp.structuralpattern;
    
    public class HPUSB implements IUSB{
    
        @Override
        public void charge() {
            System.out.println("使用惠普USB接口充电~");
            
        }
    
    }

    适配者类,使用PSP充电

    package com.pichen.dp.structuralpattern;
    public class PSP {
    
        public void pspCharge(){
            
            System.out.println("使用PSP接口充电~");
            
        }
    }

    适配器类(继承方式),继承PSP类,并实现IUSB接口

    package com.pichen.dp.structuralpattern;
    public class PSPAdapter extends PSP implements IUSB{
    
        @Override
        public void charge() {
            super.pspCharge();
        }
    
    }

    适配器类(组合方式),组合PSP对象,并实现IUSB接口

    package com.pichen.dp.structuralpattern;
    public class PSPAdapter2 implements IUSB{
    
        private PSP psp;
        
        public PSPAdapter2(PSP psp) {
            this.psp = psp;
        }
        @Override
        public void charge() {
            psp.pspCharge();
        }
    
        
    }

    使用者Main,测试结果

    package com.pichen.dp.structuralpattern;
    
    public class Main {
        public static void main(String[] args) {
            IUSB usb = new HPUSB();
            usb.charge();
            
            IUSB usb_psp = new PSPAdapter();//继承
            usb_psp.charge();
            
            IUSB usb_psp2 = new PSPAdapter2(new PSP());//组合
            usb_psp2.charge();
        }
    }

    打印结果:

    使用惠普USB接口充电~
    使用PSP接口充电~
    使用PSP接口充电~
  • 相关阅读:
    Internal Server Error处理程序“PageHandlerFactory-Integr”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    OpenGL学习(4)——纹理
    OpenGL学习(3)——Shader(补)
    OpenGL学习(3)——Shader
    OpenGL学习(2)——绘制三角形(补)
    OpenGL学习(2)——绘制三角形
    OpenGL学习(1)——创建窗口
    PHP框架对地址进行Dispatch的思考
    OJ练习47——T12 Integer to Roman
    OJ练习46——T11 Container With Most Water
  • 原文地址:https://www.cnblogs.com/chenpi/p/5188384.html
Copyright © 2011-2022 走看看