0x01:外观模式简介
外观模式(又称门面模式),通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。UML类图如下:
其中Facade是外观角色,也叫门面角色,客户端可以调用这个角色的方法,此角色知晓子系统的所有功能和责任,将客户端的请求代理给适当的子系统对象;
Subsystem是子系统角色,可以同时拥有一个或多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合,子系统并不知道门面的存在。
0x02:外观模式的实现
-
定义子系统Subsystem
public class SubSystemA {
public void dosomethingA() {
System.out.println("SubSystemA dosomethingA");
}
}
public class SubSystemB {
public void dosomethingB() {
System.out.println("SubSystemB dosomethingB");
}
}
-
外观角色Facade
public class Facade {
//被委托的对象
private SubSystemA a;
private SubSystemB b;
public Facade() {
a = new SubSystemA();
b = new SubSystemB();
}
//提供给外部访问的方法
public void methodA() {
this.a.dosomethingA();
}
public void methodB() {
this.b.dosomethingB();
}
}
-
测试代码
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.methodA();
facade.methodB();
}
}
0x03:应用
因为程序员薪资普遍相对较高,所以一般有些小钱。那如何进行财富管理呢?自己购买股票呢?又不能很好的掌握买卖点,经常被人割韭菜。那还有什么管理财富的渠道吗?购买基金就是一个不错的渠道。
-
股票、国债、期货类
public class Stock{
//买股票
public void buy() {
System.out.println("股票1买入");
}
//卖股票
public void sell() {
System.out.println("股票1卖出");
}
}
public class NationalDebt{
//买国债
public void buy() {
System.out.println("国债1买入");
}
//卖国债
public void sell() {
System.out.println("国债1卖出");
}
}
public class Futures{
//买期货
public void buy() {
System.out.println("期货1买入");
}
//卖期货
public void sell() {
System.out.println("期货1卖出");
}
}
-
基金类
基金经理人通过该类作为中间交互者,可以接受投资者的资金,统一对股票、国债、期货进行购买和赎回操作。
public class Fund {
private Stock stock;
private NationalDebt nationalDebt;
private Futures futures;
public Fund() {
stock = new Stock(); //配置30%
nationalDebt = new NationalDebt(); //配置60%
futures = new Futures(); //配置20%
}
//购买基金
public void buyFund() {
stock.buy();
nationalDebt.buy();
futures.buy();
}
//赎回基金
public void sellFund() {
stock.sell();
nationalDebt.sell();
futures.sell();
}
}
上面这是一个基金,它配置了30%的股票+60%的国债+20%期货。
-
程序员购买和赎回基金操作
public class Client {
public static void main(String[] args) {
Fund fund = new Fund();
//基金购买
fund.buyFund();
System.out.println("》》》》》》》》》》》》");
//基金赎回
fund.sellFund();
}
}