提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
1.最少知识原则:只和你的密友谈话。
2.为交互对象之间的松耦合设计而努力。
有一个简单的家庭影院,有电灯、屏幕、投影仪、DVD,但是需要看电影的时候却需要主人做很多事情,打开电灯、调暗灯光、放下屏幕、打开投影仪、打开DVD、播放DVD,电影结束之后也需要做很多事情,能不能只要告诉家庭影院,我需要看电影,家庭影院就可以自动做那些事情。
增加一个家庭影院外观类,组合了电灯、屏幕、投影仪、DVD,调用者只需要调用家庭影院的看电影方法,其他的都交给家庭影院来做,不需要知道具体的电灯、屏幕等的具体实现。
package facade; /** * 电灯接口 * @author terry * */ public interface Light { //关灯 void off(); //调节亮度 void dim(int percentage); //开灯 void on(); }
package facade; /** * 屏幕接口 * @author terry * */ public interface Screen { //上升 void up(); //下降 void down(); }
package facade; /** * 投影仪接口口 * @author terry * */ public interface Projector { //开投影仪 void on(); //关投影仪 void off(); }
package facade; /** * DVD接口 * @author terry * */ public interface DVD { //打开dvd void on(); //关闭dvd void off(); //播放影片 void play(String movie); }
package facade; /** * 家用灯 * @author terry * */ public class HomeLight implements Light{ @Override public void off() { System.out.println("Home Light is off"); } @Override public void dim(int percentage) { System.out.println("Home Light turn "+percentage+" percente dim"); } @Override public void on() { System.out.println("Home Light is on"); } }
package facade; /** * 家用屏幕 * @author terry * */ public class HomeScreen implements Screen{ @Override public void up() { System.out.println("Home Screen is up"); } @Override public void down() { System.out.println("Home Screen is down"); } }
package facade; /** * 家用投影仪 * @author terry * */ public class HomeProjector implements Projector{ @Override public void on() { System.out.println("Home Projector is on"); } @Override public void off() { System.out.println("Home Projector is off"); } }
package facade; /** * 家用DVD * @author terry * */ public class HomeDVD implements DVD{ @Override public void on() { System.out.println("Home DVD is on"); } @Override public void off() { System.out.println("Home DVD is off"); } @Override public void play(String movie) { System.out.println("Home DVD is playing "+movie); } }
package facade; public class Test { public static void main(String[] args) { //家庭影院所需组件 Light light = new HomeLight(); Screen screen = new HomeScreen(); Projector projector = new HomeProjector(); DVD dvd=new HomeDVD(); //创建家庭影院 HomeTheaterFacade homeTheaterFacade=new HomeTheaterFacade(light, screen, projector, dvd); //轻松看电影 homeTheaterFacade.startWatchMovie(); homeTheaterFacade.endWatchMovie(); } }