外观模式(Facade)
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。
// 汽车引擎
public class Engine {
public String engineWork() {
return "BMW's Engine is Working";
}
public String EngineStop() {
return "BMW's Engine is stopped";
}
}
// 汽车轮子
public class Wheel {
public String WheelCircumrotate() {
return "BMW's Wheel is Circumrotating";
}
public String WheelStop() {
return "BMW's Wheel is stoped";
}
}
public class Body {
public Wheel[] wheels = new Wheel[4];
public Engine engine = new Engine();
public Body() {
for (int i = 0; i < wheels.length; i++) {
wheels[i] = new Wheel();
}
}
}
public class CarFacade {
Body body = new Body();
public void Run() {
body.engine.engineWork();
for (int i = 0; i < body.wheels.length; i++) {
body.wheels[i].WheelCircumrotate();
}
}
public void Stop() {
body.engine.EngineStop();
for (int i = 0; i < body.wheels.length; i++) {
body.wheels[i].WheelStop();
}
}
}
public class Test {
public static void main(String[] args) {
CarFacade car = new CarFacade();
car.Run();
car.Stop();
}
}
外观模式完美地体现了依赖倒转原则和迪米特法则思想
依赖倒转原则: 高层模块不应该依赖低层模块,两个都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象
迪米特法则:
① 只与你直接的朋友们通信;
② 不要跟“陌生人”说话;
③ 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。