08-外观模式
08-外观模式
概念
外观模式(facade)为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
什么时候使用外观模式
三个阶段:
首先,在设计初期,应该有意识的将不同的两个层分离,在层与层之间简历外观Facade, 例如典型的三层架构,这样可以为复杂的子系统提供一个简单的接口,大大降低耦合;
其次,在开发阶段,子系统往往因为不断的重构烟花而变得越来越复杂,增加外观模式(facade)可以提供一个简单的接口,减少他们之间的依赖;
第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,但其非常重要,新系统会依赖于它,此时可以开发一个外观facade类,来提供设计粗糙或者高度复杂的遗留代码的比较清晰的简单接口,让新系统与facade对象交互,facade与遗留代码交互所有复杂的工作。
实践
以基金为例,一个基金由基金经理打理,其会购买多种类型的股票并时不时的进行买入和卖出的工作,而我们个人只用买入基金,无需进行多个股票的操作,便可以由一定的收益,不用具备过深的金融领域的相关知识。
package com.niao.facade;
public class Stock1 {
public void buy(){
System.out.println("Buy stock1.");
}
public void sell(){
System.out.println("Sell stock1.");
}
}
package com.niao.facade;
public class Stock2 {
public void buy(){
System.out.println("Buy stock2.");
}
public void sell(){
System.out.println("Sell stock2.");
}
}
package com.niao.facade;
public class NationalDebt1 {
public void buy(){
System.out.println("Buy national debt.");
}
public void sell(){
System.out.println("Sell national debt.");
}
}
package com.niao.facade;
public class Realty1 {
public void buy(){
System.out.println("Buy realty.");
}
public void sell(){
System.out.println("Sell realty.");
}
}
package com.niao.facade;
public class Fund {
private Stock1 stock1;
private Stock2 stock2;
private NationalDebt1 nationalDebt1;
private Realty1 realty1;
public Fund() {
stock1 = new Stock1();
stock2 = new Stock2();
nationalDebt1 = new NationalDebt1();
realty1 = new Realty1();
}
public void buy(){
stock1.buy();
stock2.buy();
nationalDebt1.buy();
realty1.buy();
}
public void sell(){
stock1.sell();
stock2.sell();
nationalDebt1.sell();
realty1.sell();
}
}
package com.niao.facade;
public class Client {
public static void main(String[] args) {
Fund fund = new Fund();
fund.buy();
fund.sell();
}
}