设计模式——适配器

本文详细介绍了适配器设计模式的三种形式:类的适配器模式、对象的适配器模式和接口的适配器模式。每种模式都通过具体的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包装类来实现

 

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

转载于:https://www.cnblogs.com/FlyAway2013/p/3916839.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值