java适配器模式的简单理解

对于适配器模式,简单的一句话就是,它是一种将一个接口转成另一个接口的设计。

类图:

java适配器模式的简单理解_第1张图片

《Head First 设计模式》书中举的鸭子和火鸡的例子已经很好的介绍了(这书很好大家快去看),这里换一种说法来更简单的去理解,我也举一个简单的例子。

现在有两个接口,是胖子和瘦子:

        public interface Fatty{
		public void hitOtherPeople();//打人
		public void dodge();//走位
	}
	
	public interface Thin{
		public void beHit();//被打
		public void dodge();
	}

两个实现类,凯哥和我:

	public static class RongKai implements Fatty{

		@Override
		public void hitOtherPeople() {
			System.out.println("打别人");
		}

		@Override
		public void dodge() {
			System.out.println("走位风骚");
		}
		
	}
	
	public static class Me implements Thin{

		@Override
		public void beHit() {
			System.out.println("只能被打");
		}

		@Override
		public void dodge() {
			System.out.println("走位虚");
		}
		
	}
现在问题来了,现在要举办拳击比赛,需要一个胖子参赛,只能是胖子:

	public static void boxing(Fatty fatty){
		fatty.hitOtherPeople();
		fatty.dodge();
	}

但是凯哥现在去办别的大事去了,只有我个瘦子在,怎么办呢?打肿脸充胖子吧,把自己伪装成胖子去,这时候就需要一个适配器了:

	public static class ThinAdapter implements Fatty{
		private Thin thin;
		
		public ThinAdapter(Thin thin){
			this.thin = thin;
		}

		@Override
		public void hitOtherPeople() {
			thin.beHit();
		}

		@Override
		public void dodge() {
			thin.dodge();
		}
		
	}
注意这里的适配器实现了Fatty接口,也就是说它是一个Fatty,然后用了组合的方式,把一个Thin类型的对象传进来,具体的“打人”和“走位”就让thin对象来做了(可惜实际上只能被打)。

最后去参赛吧:

	public static void main(String[] args) {
		boxing(new ThinAdapter(new Me()));
	}

结果是:

java适配器模式的简单理解_第2张图片



你可能感兴趣的:(java适配器模式的简单理解)