标签:nbsp ++ std 客户 改变 ... ring blog author
适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
例子:火鸡变鸭子。
先定义一个鸭子接口。
package cn.sp.test06;
/**
* 鸭子
* @author 2YSP
*
*/
public interface Duck {
//具备呱呱叫 和 飞行的能力
public void quack();
public void fly();
}
package cn.sp.test06;
/**
* 绿头鸭是鸭子的子类
* @author 2YSP
*
*/
public class MallardDuck implements Duck{
@Override
public void quack() {
System.out.println("Quack quack ");
}
@Override
public void fly() {
System.out.println("I am flying .. .");
}
}
火鸡接口:
package cn.sp.test06;
/**
* 火鸡
* @author 2YSP
*
*/
public interface Turkey {
//火鸡只会咯咯叫
public void gobble();
public void fly();//虽然会飞,但飞不远
}
package cn.sp.test06;
/**
* 野生火鸡
* @author 2YSP
*
*/
public class WildTurkey implements Turkey{
@Override
public void gobble() {
System.out.println("Gobble gobble");
}
@Override
public void fly() {
System.out.println("I‘m flying a short distance");
}
}
重点来了,适配器。
package cn.sp.test06;
/**
* 适配器,火鸡冒充鸭子
* @author 2YSP
*
*/
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey){
this.turkey = turkey;
}
@Override
public void quack() {//其实调用的是火鸡的行为
turkey.gobble();
}
@Override
public void fly() {
for(int i = 0 ; i<5 ; i++){
turkey.fly();
}
}
}
测试:
package cn.sp.test06;
/**
* 适配器模式
* @author 2YSP
*
*/
public class DuckTestDrive {
public static void main(String[] args) {
MallardDuck duck = new MallardDuck();
WildTurkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);
System.out.println("The Turkey says ...");
turkey.gobble();
turkey.fly();
System.out.println("\nThe Duck says ...");
duck.quack();
duck.fly();
System.out.println("\nThe turkeyAdapter says ...");
turkeyAdapter.quack();
turkeyAdapter.fly();
}
}
二、外观模式
外观模式就是当我们要调用许多类的方法时,直接调用的话十分复杂且不易维护,但是可以新建一个类,其中含有所需要的所有对象,然后将他们的方法封装在一个方法内,这样只要调用新建的类方法即可。
定义:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
其中遵循了一条设计原则:最少知识原则:只和你的密友谈话。
public float getTemp(){//反例
Thermometer thermometer = station.getThermometer();
return thermometer.getTemperature();
}
public float getTemp(){//正确
return station.getTemperature();
}
}
外观,装饰者,适配器三种模式很容易混淆,可以这样区分。
装饰者:不改变接口,但加入责任(新功能)。
适配器:将一个接口转成另一个接口。
外观:让接口更简单。
标签:nbsp ++ std 客户 改变 ... ring blog author
原文地址:http://www.cnblogs.com/2YSP/p/6931129.html