当前:外观模式(Facade)
需求:坦克大战
创建两种坦克
坦克类型 | 射程 | 速度 |
b70 | 70米 | 时/70公里 |
b50 | 50米 | 时/70公里 |
类图
设计说明
该实例需求(与上面的公共需可能并不完全相同,这里是为了体现该模式的价值)
将发射炮弹和走行的具体机能由动力驱动层去实现。
但是这些机能要对电子操作层提供一个接口。
模式说明
这是一个很简单的模型,没啥好说的。
这是一个架构模型,一个模块对外提供的接口必须由一个外观类出承载。
所有的项目都这么设计,这几乎是一个规范。
简单一句话:就是把该模块的所有对外公开的函数,都交给一个接口负责,这个接口就是外观。
代码
java实现
class Function{
static Function mFunction = new Function();
static Function get(String mStr) {
mFunction.setOperation(mStr);
return mFunction;
}
public String mOperation;
public void setOperation(String mStr) {
this.mOperation = mStr;
}
public void exe() {
System.out.println(mOperation);
}
};
interface IPowerFacade{
void shot();
void run();
}
class Shot{
void shot() {
Function.get("炮弹发射").exe();
}
}
class Run{
void run() {
Function.get("速度200/公里").exe();
}
}
class PowerFacade implements IPowerFacade{
Shot mShot;
Run mRun;
public PowerFacade() {
mShot = new Shot();
mRun = new Run();
}
public void shot() {
mShot.shot();
}
public void run() {
mRun.run();
}
}
class Controllayer{
PowerFacade mPowerFacade;
public void setmPowerFacade(PowerFacade mPowerFacade) {
this.mPowerFacade = mPowerFacade;
}
public void run() {
mPowerFacade.shot();
mPowerFacade.run();
}
}
public class Client {
public static void main(String[] args) {
System.out.println("hello world !");
Controllayer controllayer = new Controllayer();
PowerFacade facade = new PowerFacade();
controllayer.setmPowerFacade(facade);
controllayer.run();
}
}
运行结果