组成:
Facade门面角色、subsystem子系统角色
定义:子系统的外部与其内部 的通信必须通过一个统一的对象进行。(PS:门面最好不要参与业务逻辑)。
PS:如果一个系统有好几个子系统的话,每一个子系统有一个外观类,整个系统可以有数个外观类。
实例:1、基金与股票:
UML图:
实现代码:
子系统:
package 门面模式基金与股票;
public class Stock1 {
public void buyStock1(){
System.out.println("买股票1");
}
public void sellStock1(){
System.out.println("卖出股票1");
}
}
public class Stock2 {
public void buyStock2(){
System.out.println("买股票2");
}
public void sellStock2(){
System.out.println("卖出股票2");
}
}
门面类:
package 门面模式基金与股票;
public class Fund {
private Stock1 s1=null;
private Stock2 s2=null;
public Fund() {
s1=new Stock1();
s2=new Stock2();
}
public void buyFund() {
s1.buyStock1();
s2.buyStock2();
}
public void sellFund() {//课件上这样写的,但是有的地方说最好门面角色不要参与业务逻辑,
//显然这地方代码不符合这一条
s1.sellStock1();
s2.sellStock2();
}
}
场景类:
public class Client {
public static void main(String[] args) {
Fund f=new Fund();
f.buyFund();
f.sellFund();
}
}
示例2:
家庭影院示例链接:https://paste.ubuntu.com/p/HBkCrMJyg6/
总结:符合迪米特法则(最少知识法则),但不符合开闭原则,------------------------封装交互、简化调用。
The end;