设计模式案例代码之适配器模式

转载请注明出处:http://blog.csdn.net/droyon/article/details/8744722

适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

这个模式可以让我们通过创建适配器进行接口转换,让不兼容的接口变成兼容。这个模式让客户端从实现中解耦。

当你需要使用一个现有的类而其接口并不符合你的要求时,就使用适配器。

适配器模式将对象包装起来,改变其接口。装饰着模式将一个对象包装起来,增加其新行为和责任。

案例情景:

四只小花猫参加唱歌比赛,比赛要求五个人,他们只有四只,他们把小花狗忽悠进来了,可小花狗不会sing,看看适配器如何帮助他们。

案例代码下载


1、Cat.java

public interface Cat {
	public void sing();
}
2、SmaillFlowerCat.java

public class SmaillFlowerCat implements Cat{
	private String name;
	
	public  SmaillFlowerCat(String name){
		this.name = name;
	}
	@Override
	public void sing() {
		System.out.println(name+"--喵~");
	}
	
}

3、Dog.java

public class Dog {
	public void bake(){
		System.out.println("汪汪~");
	}
}
4、CatAdapter.java

public class CatAdapter implements Cat{
	private Dog mDog;
	public CatAdapter(Dog dog){
		mDog = dog;
	}
	@Override
	public void sing() {
		mDog.bake();
	}
}
5、Test.java

import java.util.ArrayList;


public class Test {
	public static void main(String args[]){
		ArrayList<Cat> catArrayList = new ArrayList<Cat>();
		
		Dog dog =new Dog();
		for(int i=0;i<4;i++){
			SmaillFlowerCat cat = new SmaillFlowerCat("小花猫"+(i+1)+"号");
			catArrayList.add(cat);
		}
		Cat dogToCat = new CatAdapter(dog);
		catArrayList.add(dogToCat);
		
		for(Cat c:catArrayList){
			c.sing();
		}
	}
}
测试结果:

小花猫1号--喵~
小花猫2号--喵~
小花猫3号--喵~
小花猫4号--喵~
汪汪~

我们通过CatAdapter将小狗的bake方法,适配成了sing方法,sing方法是兼容的方法。


优点:

被适配者的任何子类都可以搭配着适配器使用。

我们的Dog类,不需要做任何改变,Dog类是真正被解耦的。

总结:适配器需要分清谁是被适配者。我们的适配器需要组合被适配者,继承目标对象的接口,在接口实现中,调用被适配者的方法。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hailushijie

您的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值