10年 Java程序员,硬核人生!勇往直前,永不退缩!

欢迎围观我的git:https://github.com/R1310328554/spring_security_learn 寻找志同道合的有志于研究技术的朋友,关注本人微信公众号: 觉醒的码农,或Q群 165874185

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

又分为三种:

类的适配器模式:

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包装类来实现

 

posted on 2014-08-16 20:06  CanntBelieve  阅读(236)  评论(0编辑  收藏  举报