外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
类图示例

举个例子
买卖基金
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| class Stock1 { public void Sell() { System.out.println("Stock 1 sell"); }
public void Buy() { System.out.println("Stock 1 buy"); } }
class Stock2 { public void Sell() { System.out.println("Stock 2 sell"); }
public void Buy() { System.out.println("Stock 2 buy"); } }
class Stock3 { public void Sell() { System.out.println("Stock 3 sell"); }
public void Buy() { System.out.println("Stock 3 buy"); } }
class NationalDebt { public void Sell() { System.out.println("National Debt sell"); }
public void Buy() { System.out.println("National Debt buy"); } }
class Realty { public void Sell() { System.out.println("Realty sell"); }
public void Buy() { System.out.println("Realty buy"); } }
class Fund { Stock1 stock1; Stock2 stock2; Stock3 stock3; NationalDebt nationalDebt; Realty realty;
public Fund() { stock1 = new Stock1(); stock2 = new Stock2(); stock3 = new Stock3(); nationalDebt = new NationalDebt(); realty = new Realty(); }
public void BuyFund() { stock1.Buy(); stock2.Buy(); stock3.Buy(); nationalDebt.Buy(); realty.Buy(); }
public void SellFund() { stock1.Sell(); stock2.Sell(); stock3.Sell(); nationalDebt.Sell(); realty.Sell(); } }
public class Facade { public static void main(String[] args) { Fund fund = new Fund(); fund.BuyFund(); fund.SellFund(); } }
|
类图

外观模式包含如下角色
- Facade类:提供高层接口,简化客户端与子系统的交互。
- 子系统类:实现具体的业务逻辑,被Facade类调用。
模式分析
- 优点
- 减少依赖:客户端与子系统之间的依赖减少。
- 提高灵活性:子系统的内部变化不会影响客户端。
- 增强安全性:隐藏了子系统的内部实现,只暴露必要的操作。
- 缺点
- 违反开闭原则:对子系统的修改可能需要对外观类进行相应的修改。