[img]http://images.cnblogs.com/cnblogs_com/zhenyulu/Pic91.gif[/img]
此模式的特点是 使抽象与抽象的实现同时处在了变化之中,其关键是引入了一个接口或抽象类
父类声明了一个抽象方法,此抽象方法的方法名与接口定义的方法相同,子类实现了这个抽象方法但是得依赖加入的动态接口或抽象类声明,这样子类的实现也可以根据抽象的改变而动态改变
抽象父类 ---飞船
抽象接口:描述飞船发动机的类型
2个实现接口的实现类,标明了两种类型
电子发动机
核发动机
2艘飞船通过继承父类而来
1盖亚
2诺亚
配置抽象实现的类,在调用子类行为前,先指定抽象的属性,在这个例子里就是电力发动机或核动力发动机
测试
结果
nuclerPowerEngine is on line
此模式的特点是 使抽象与抽象的实现同时处在了变化之中,其关键是引入了一个接口或抽象类
父类声明了一个抽象方法,此抽象方法的方法名与接口定义的方法相同,子类实现了这个抽象方法但是得依赖加入的动态接口或抽象类声明,这样子类的实现也可以根据抽象的改变而动态改变
抽象父类 ---飞船
public abstract class FlyShip {
public shipPower sp;
public FlyShip(){
sp = ShipPowerBuilder.getSp();
}
public abstract void startPowerEngine();
}
抽象接口:描述飞船发动机的类型
public interface shipPower {
void startPowerEngine();
}
2个实现接口的实现类,标明了两种类型
电子发动机
public class ElecticPowerEngine implements shipPower {
public void startPowerEngine() {
System.out.println("ElecticPowerEngine is online");
}
}
核发动机
public class NuclerPowerEngine implements shipPower {
public void startPowerEngine() {
// TODO Auto-generated method stub
System.out.println("nuclerPowerEngine is on line");
}
}
2艘飞船通过继承父类而来
1盖亚
public class Gaya extends FlyShip {
public Gaya() {
super();
// TODO Auto-generated constructor stub
}
@Override
public void startPowerEngine() {
// TODO Auto-generated method stub
this.sp.startPowerEngine();
}
}
2诺亚
public class Noya extends FlyShip {
public Noya() {
super();
// TODO Auto-generated constructor stub
}
@Override
public void startPowerEngine() {
// TODO Auto-generated method stub
this.sp.startPowerEngine();
}
}
配置抽象实现的类,在调用子类行为前,先指定抽象的属性,在这个例子里就是电力发动机或核动力发动机
public class ShipPowerBuilder {
private static shipPower sp;
public ShipPowerBuilder(shipPower sp){
this.sp=sp;
}
public static shipPower getSp() {
return sp;
}
}
测试
// TODO Auto-generated method stub
ShipPowerBuilder builder = new ShipPowerBuilder(new NuclerPowerEngine());
Noya noya = new Noya();
noya.startPowerEngine();
结果
nuclerPowerEngine is on line