设计模式(七) : 结构型模式--适配器模式

适配器模式主要是为了解决接口不符合系统需要的问题。分成类的适配器和对象的适配器。

1. 类的适配器:

设计模式(七) : 结构型模式--适配器模式

示意性代码:

package com.javadesignpattern.Adapter;



public interface Target {

    

    

    public void sampleOperation1();

    

    public void sampleOperation2();



}
package com.javadesignpattern.Adapter;



public class Adaptee {

    

    public void sampleOperation1() {

        System.out.println(Adaptee.class +  " : sampleOperation1");        

    }

    

}
package com.javadesignpattern.Adapter;



public class Adapter extends Adaptee implements Target{



	public void sampleOperation2() {

		// TODO Auto-generated method stub

		System.out.println(Adapter.class +  " : sampleOperation2");	

	}



}

package com.javadesignpattern.Adapter.Class;



public class Client {

    

    public static void main(String[] args){

        Target target = new Adapter();

        target.sampleOperation1();

        target.sampleOperation2();

        

    }



}

 

2. 对象的适配器

设计模式(七) : 结构型模式--适配器模式

示意性代码:

Target类和Adaptee类和上面的类的适配器是一样的

package com.javadesignpattern.Adapter.object;



public class Adaptor implements Target{

    private Adaptee adaptee;

    

    public Adaptor(Adaptee adaptee){

        super();

        this.adaptee = adaptee;

    }



    public void sampleOperation2() {

        // TODO Auto-generated method stub

        System.out.println(Adaptor.class +  " : sampleOperation2");    

    }



    public void sampleOperation1() {

        // TODO Auto-generated method stub

        adaptee.sampleOperation1();

    }



}
package com.javadesignpattern.Adapter.object;



public class Client {

	

	public static void main(String[] args){

		Adaptee adaptee = new Adaptee();

		Target target = new Adaptor(adaptee);

		target.sampleOperation1();

		target.sampleOperation2();	

		

	}



}

 

对象适配器和类的适配器的优缺点:

1. 类的适配器使用继承,是一种静态的适配方式; 对象的适配器是利用组合,是一种动态的适配方式;所以,类的适配器只是适配了这一个类,Adapter类和Adaptee类的子类是不能一块工作的;对象的适配器的话,adapter类和adaptee类的子类是可以一起工作的。

2. 类的是适配器是可以重定义Adaptee的部分行为的(重写),而对象的适配器的话,重定义比较困难,但是增加一些方法比较简单。

 

对于尽量使用合成、聚合的方式而不是使用继承,推荐使用对象的适配器。但是具体情况具体分析。

 

你可能感兴趣的:(适配器模式)