适配器模式

看java思想的第九章--接口,讲的好杂,讲到了两个设计模式

策略设计模式(比较常用)

适配器设计模式

适配器设计模式我理解了半天,也不算完全理解

是在不修改两个代码块的情况下,将两个不兼容的类融合在一起,像是一个转换器,通过转换将他们可以协作起来.


       这是适配器模式的类图,有三个重要角色:目标接口,被适配者,适配器.想组合在一起的是目标接口和被适配者,可以达到将被适配者可以向上转型成目标接口的类型.不改变原来代码块的情况下,通过适配器将他们组合到一起.

适配器的几种模式:类适配器,对象适配器,接口适配器

1.类适配器(通过继承来实现适配器功能)

        我们想要访问A接口,A接口中没有我们想要的方法,但是B接口中有(也可以是一个已经存在的类).在不能改变A接口的情况下,我们要创建一个中间件C.让C来实现A接口,我们就可以继续访问A接口中的方法了(这并不是我们想访问的),让C继承B的实现类BB,就可以在重写A的方法中直接调用继承而来的方法,从而实现一个简单的适配.

目标接口

public interface Target{
	
	void TargetdoSomething();
}

被适配者

public class Adaptee {

	public void AdapteedoSomething(){
		System.out.println("Adaptee do something");
	}
}

适配器()

public class Adapter extends Adaptee implements Target {

	@Override
	public void TargetdoSomething(){
		AdapteedoSomething();
	}
}

测试方法

public class Test(){

	public static void main(String[] args) {
      	        Target target = new Adapter();
      	        target.TargetdoSomething();
        }
}

输出结果

Adaptee do something

2.对象适配器(通过组合来实现适配器功能)

        我们想要访问A接口,A接口中没有我们想要的方法,但是B接口中有(也可以是一个已经存在的类).在不能改变A接口的情况下,我们要创建一个中间件C.让C来实现A接口,我们就可以继续访问A接口中的方法了(这并不是我们想访问的),在C中引用实现B接口的BB对象,通过C的构造器接收这个对象,在重写A的方法中使用BB对象来调用我们想要的方法,来实现一个简单的适配器.

目标接口

public interface Target{
	
	void TargetdoSomething();
}

被适配者

public class Adaptee {

	public void AdapteedoSomething(){
		System.out.println("Adaptee do something");
	}
}

适配器

public class Adapter implements Target {

	private Adaptee adaptee;

	public Adapter(Adaptee adaptee){
		this.adaptee = adaptee;
	}

	@Override
	public void TargetdoSomething(){
		adaptee.AdapteedoSomething();
	}
	
}

测试方法

public class Test(){

        public static void main(String[] args) {
      	        Adaptee adaptee = new Adaptee();
          	Target target = new Adapter(adapter);
      	        target.TargetdoSomething();
        }
}

输出结果

Adaptee do something

3.接口适配器(通过抽象类来实现适配,这种适配稍别于上面所述的适配)

        实现一个接口,只想实现接口中个别方法,如果实现接口就要实现接口中所有的方法,对不需要的方法进行置空.但是会使代码显得臃肿.通过抽象类实现该接口,再去继承这个抽象类就只需要重写我们需要的方法就行了.这个抽象类就可作为中间适配器.

目标接口

public interface Target {

	void A();
	void B();
	void C();
	void D();
	void E();

}

适配器

public abstract class Adapter implements Target {

	public void A(){};
	public void B(){};
	public void C(){};
	public void D(){};
	public void E(){};

}

被适配对象

public class Adaptee extends Adapter {

	public void A() {
		System.out.println("I'm A");
	}


	public void D() {
		System.out.println("I'm D");
	} 

}

测试方法

public class Test {

	public static void main(String[] args) {
		
		Target target = new Adaptee();
		target.A();
		target.D();
	}
}

测试结果

I'm A
I'm D


文章参考http://www.cnblogs.com/V1haoge/p/6479118.html点击打开链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值