美文网首页
Java设计模式之适配器模式

Java设计模式之适配器模式

作者: PeterHe888 | 来源:发表于2017-09-14 20:05 被阅读14次

    什么是适配器模式

    当你想使用一个类的时候,但是这个类的接口跟你又不一样,不能拿来直接用,这个时候就需要一个适配器来帮你了。

    适配器类图

    Class: void setPlugin(cnPlugin:CnPluginInterface); void charge();
    
    Interface: CnPluginInterface -> void chargeWith2Pins();
    
    Class: CnPlugin -> void chargeWith2Pins();
    
    Class: PluginAdapter -> enPlugin: EnPluginInterface; void chargeWith2Pins();
    
    Interface: EnPluginInterface -> void chargeWith3Pins();
    
    Class: EnPlugin -> void chargeWith3Pins();
    

    示例代码

    public interface CnPluginInterface {
        void chargeWith2Pins();
    }
    
    public class CnPlugin implements CnPluginInterface{
    
        @Override
        public void chargeWith2Pins() {
            System.out.println("charge with CnPlugin");
        }
    }
    
    public class Home {
        private CnPluginInterface cnPlugin;
        
        public Home() {
            
        }
        
        public Home(CnPluginInterface cnPlugin) {
            this.cnPlugin = cnPlugin;
        }
        
        public void setPlugin(CnPluginInterface cnPlugin) {
            this.cnPlugin = cnPlugin;
        }
        
        public void charge() {
            cnPlugin.chargeWith2Pins();
        }
    
    }
    
    public class CnTest {
        public static void main(String[] args) {
            CnPluginInterface cnPlugin = new CnPlugin();
            Home home = new Home(cnPlugin);
            home.charge();
            
            EnPluginInterface enPlugin = new EnPlugin();
            Home home1 = new Home();
            PluginAdapter pluginAdapter = new PluginAdapter(enPlugin);
            home1.setPlugin(pluginAdapter);
            home1.charge();
        }
    
    }
    

    1.适配器必须实现原有的旧的接口
    2.适配器对象中持有对新接口的引用, 当调用旧接口时,将这个调用委托给实现新接口的对象来处理,也就是在适配器对象中组合一个新接口。

    public interface EnPluginInterface {
        void chargeWith3Pins();
    }
    
    public class EnPlugin implements EnPluginInterface{
    
        @Override
        public void chargeWith3Pins() {
            System.out.println("charge with EnPlugin");
        }
    }
    
    public class PluginAdapter implements CnPluginInterface{
        private EnPluginInterface enPlugin;
    
        @Override
        public void chargeWith2Pins() {
            enPlugin.chargeWith3Pins();
        }
        
        public PluginAdapter(EnPluginInterface enPlugin) {
            this.enPlugin = enPlugin;
        }
    
    }
    

    运行结果:

    适配器模式.png

    适配器模式的应用

    只要就是在旧的接口、新的接口之间完成适配。
    适配器模式的三个特点:

    • 适配器对象实现原有接口
    • 适配器对象组合一个实现新接口的对象(这个对象也可以不实现一个对象,只是一个单纯的对象)
    • 对适配器原有接口方法的调用委托给新接口的实例的特定方法

    适配器模式到此结束

    相关文章

      网友评论

          本文标题:Java设计模式之适配器模式

          本文链接:https://www.haomeiwen.com/subject/kixjsxtx.html