适配器模式
定义:将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容
的类可以合作无间。
实际做法是,让一个类继承目标接口。
这样的做法好处有
1.可以复用类,省去编写另一个类的工作
2.当需要统一接口时,可以发挥作用
适配器模式主要有2种:类适配器模式、对象的适配器模式、接口的适配器模式
java没有类适配器,主要使用对象的适配器
可以看出,有3个对象
client target的使用者
target client所需的目标接口
Adapter 转换器类,将Adatee转化为目标接口
Adaptee 被转换的类,用该类实现目标接口
代码胜千言
充当target接口
package 设计模式.适配器模式;
/**
* Created by Administrator on 2018/10/8.
*/
public interface bigCat {
public void action();
}
实现接口的类
package 设计模式.适配器模式;
/**
* Created by Administrator on 2018/10/8.
*/
public class cat implements bigCat{
public cat() {
System.out.println("我是一只猫,快乐的星猫");
}
public void action(){
}
}
适配器类
package 设计模式.适配器模式;
/**
* Created by Administrator on 2018/10/8.
*/
public class fatTiger implements bigCat{
private tiger t;
public fatTiger() {
}
public fatTiger(tiger t){
this.t=t;
System.out.println("我是胖虎,我潜入了猫群");
}
@Override
public void action() {
t.action();
}
public static void main(String[] args){
bigCat aCat=new cat();
tiger t=new tiger();
bigCat fakeCat=new fatTiger(t);
if(aCat.getClass()!=fakeCat.getClass()){
System.out.println("胖虎die");
}
}
}
tiger类
package 设计模式.适配器模式;
/**
* Created by Administrator on 2018/10/8.
*/
public class tiger {
public void action() {
System.out.println("我是胖虎,我现在很饿");
}
}
执行。。
外观模式
外观模式和适配器模式差不多
可以借用一下headfirst设计模式里的例子
当你要建立自己的家庭影院时,必须执行:
打开爆米花机,开始爆米花1,将灯光调暗,放下屏幕,打开投影机
等等
你要关掉时,还要执行相反操作,,,
相当麻烦,所以外观模式就营运而生,将这些接口分装起来,组成一个个
子系统,供给用户调用,比如openMovie(),closeMovie()等等。
这样可以使在client类不必进行一系列操作,使得从组件的子系统解耦,
但如果用户想单独关灯也可以,不影响子系统,达到简化接口