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(); } }
这样的话,再也不怕炒股被割韭菜了。