参考文档:
1.设计模式书籍
2.http://blog.csdn.net/hguisu/article/details/7533759
外观模式Facade(结构型)
理论方面的可以查看这篇博客:http://blog.csdn.net/hguisu/article/details/7533759( 设计模式(九)外观模式Facade(结构型))
代码实现:(案例是上篇博客中的例子)
例子1:一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭。该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的外观模式设计。
Client.java:
package com.rick.designpattern.facade; /** * Created by MyPC on 2017/6/5. */ public class Client { public static void main(String[] args) { ConcreteFacade concreteFacade = new ConcreteFacade(); concreteFacade.on(); System.out.println("-----------------------------------------------"); concreteFacade.off(); System.out.println("-----------------------------------------------"); ConcreteFacade2 concreteFacade2 = new ConcreteFacade2(); concreteFacade2.on(); System.out.println("-----------------------------------------------"); concreteFacade2.off(); } }
AbstractFacade.java:
package com.rick.designpattern.facade; /** * Created by MyPC on 2017/6/5. */ public abstract class AbstractFacade { public abstract void on(); public abstract void off(); }
ConcreteFacade.java:
package com.rick.designpattern.facade; /** * Created by MyPC on 2017/6/5. */ public class ConcreteFacade extends AbstractFacade { private AirConditioner mAirConditioner; private Fan mFan; private Light mLight; public ConcreteFacade() { mAirConditioner = new AirConditioner(); mFan = new Fan(); mLight = new Light(); } @Override public void on() { mAirConditioner.on(); mFan.on(); mLight.on(); } @Override public void off() { mAirConditioner.off(); mFan.off(); mLight.off(); } }
ConcreteFacade2.java:
package com.rick.designpattern.facade; /** * Created by MyPC on 2017/6/5. */ public class ConcreteFacade2 extends AbstractFacade { private AirConditioner mAirConditioner; private Fan mFan; private Light mLight; private Television mTelevision; public ConcreteFacade2() { mAirConditioner = new AirConditioner(); mFan = new Fan(); mLight = new Light(); mTelevision = new Television(); } @Override public void on() { mAirConditioner.on(); mFan.on(); mLight.on(); mTelevision.on(); } @Override public void off() { mAirConditioner.off(); mFan.off(); mLight.off(); mTelevision.off(); } }
AirConditioner.java:
package com.rick.designpattern.facade; /** * Created by MyPC on 2017/6/5. */ public class AirConditioner { public void on(){ System.out.println("AirConditioner is on"); } public void off(){ System.out.println("AirConditioner is off"); } }
Fan.java:
package com.rick.designpattern.facade; /** * Created by MyPC on 2017/6/5. */ public class Fan { public void on(){ System.out.println("Fan is on"); } public void off(){ System.out.println("Fan is off"); } }
Light.java:
package com.rick.designpattern.facade; /** * Created by MyPC on 2017/6/5. */ public class Light { public void on(){ System.out.println("light is on"); } public void off(){ System.out.println("light is off"); } }
Television.java:
package com.rick.designpattern.facade; /** * Created by MyPC on 2017/6/5. */ public class Television { public void on(){ System.out.println("Television is on"); } public void off(){ System.out.println("Television is off"); } }