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

    又分为三种:

    类的适配器模式:

    package designpattern.structure.adapter.classadapter;
    
    public interface ITarget {
    
        public void method1();
    
        public void method2();
    }
    
    package designpattern.structure.adapter.classadapter;
    
    public class Source {
        
        public void method1() {
            System.out.println("Source.method1()");
        }
    
    }
    
    package designpattern.structure.adapter.classadapter;
    
    public class SourceAdapter extends Source implements ITarget {
    
        public void method2() {
            System.out.println("Adapter.method2()");
        }
    
    }
    
    package designpattern.structure.adapter.classadapter;
    
    
    /*
     * 
     * 类的适配模式:
     * 即想让没有实现ITarget接口的Source类为 ITarget 工作 
     * ———— 具体来说是想让ITarget在适当时候调用Source , 别的时候,则不需要(别的时候通过适配来工作)
     * 
     */
    public class Client {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            
            ITarget target = new SourceAdapter();
            target.method1();
            target.method2();
        }
    
    }

    对象的适配器模式:

    package designpattern.structure.adapter.objectadapter;
    
    public interface ITarget {
    
        public void method1();
    
        public void method2();
    }
    
    package designpattern.structure.adapter.objectadapter;
    
    public class Source {
        
        public void method1() {
            System.out.println("Source.method1()");
        }
    
    }
    
    package designpattern.structure.adapter.objectadapter;
    public class Wrapper implements ITarget {  
      
        private Source source;  
          
        public Wrapper(Source source){  
            super();  
            this.source = source;  
        }  
        
        public void method2() {  
            System.out.println("this is the wrapped method!");  
        }  
      
        public void method1() {  
            source.method1();  
        }  
    }  
    
    package designpattern.structure.adapter.objectadapter;
    
    
    /*
     * 
     * 类的适配模式:
     * 即想让没有实现ITarget接口的Source类为 ITarget 工作 
     * ———— 具体来说是想让ITarget在适当时候调用Source , 别的时候,则不需要(别的时候通过适配来工作)
     * 
     */
    public class Client {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            
            ITarget target = new Wrapper(new Source());
            target.method1();
            target.method2();
        }
    
    }

    接口的适配器模式:

    package designpattern.structure.adapter.interfaceadapter;
    
    public interface ITarget {
    
        public void method1();
    
        public void method2();
    }
    
    package designpattern.structure.adapter.interfaceadapter;
    public abstract class Wrapper implements ITarget {  
      
        
        public void method2() {  ----- 钩子方法实现!! 一般表明暂时不想去实现
        }  
      
        public void method1() {  
        }
    }  
    
    package designpattern.structure.adapter.interfaceadapter;
    
    public class Sub1 extends Wrapper {
        
        public void method1() {
            System.out.println("Sub1.method1()");
        }
    
    }
    package designpattern.structure.adapter.interfaceadapter;
    
    public class Sub2 extends Wrapper {
        
        public void method2() {
            System.out.println("Sub2.method2()");
        }
    
    }
    
    package designpattern.structure.adapter.interfaceadapter;
    
    
    /*
     * 
     * 接口的适配模式:
     * 
     */
    public class Client {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            
            ITarget target = new Sub1();
            target.method1();
            target.method2();
            
    
            target = new Sub2();
            target.method1();
            target.method2();
            
        }
    
    }

    总结:

    其实,它主要是为了使不兼容的两个(多个?)接口/类一起工作。

    ——一起工作的意思是说,调用A接口方法m1的时候,我想实际调用B类的m1实现——B类必须有m1(就是说A接口的其中一个方法),否则也无需适配,直接重新实现A接口就行了?不是吗?

    —— 接口可以有很多方法,但是目标类必须有它其中一个实现,—— 这样才能适配啊!!

    —— 可以通过添加Adapter、Wrapper包装类来实现

  • 相关阅读:
    【SQL Server性能优化】SQL Server 2008之表压缩
    SQL Server 锁的排队机制
    通过DAC来连接SQL Server
    通过SQL Server的数据库邮件功能功能发送邮件
    【SQL 编程你也行】BOM按节点排序
    【SQL Server数据迁移】32位的机器:SQL Server中查询ORACLE的数据
    《女孩梦三十》
    在论坛中出现的比较难的sql问题:26(动态行专列+合并字符串、补足行数)
    【SQL Server高可用性】数据库镜像:同一台机器的两个不同实例上配置数据库镜像 + 另一台见证服务器
    【SQL Server高可用性】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/3916839.html
Copyright © 2011-2022 走看看