外观模式(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(); } }
外观模式完美地体现了依赖倒转原则和迪米特法则思想
依赖倒转原则
: 高层模块不应该依赖低层模块,两个都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象
迪米特法则
:
① 只与你直接的朋友们通信;
② 不要跟“陌生人”说话;
③ 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。