所谓外观类就是提供一个中间类(外观类),来降低客户和子系统的耦合,如果需求有变,换一个外观类就好了,接口不变。
举一个基金的例子,子系统是投资股票和银行...
using System; public class YinHang { public int GetInCome(int money) { Random r = new Random(); int income = money * r.Next(-10,100) / 1000; return income; } }
using System; public class GuPiao { public int GetIncome(int money) { Random r = new Random(); int income = money * r.Next(-10, 10) / 100; return income; } }
基金公司外观类
public class JiJinCompany { //将子系统整合起来 private YinHang mYingHang; private GuPiao mGuPiao; private int mMoney; public JiJinCompany(int money) { mYingHang = new YinHang(); mGuPiao = new GuPiao() ; mMoney = money; } //提供接口对外处理 public int GetIncome() { int income = 0; income += mYingHang.GetInCome(mMoney); income += mGuPiao.GetIncome(mMoney); mMoney += income; return income; } }
现在有了基金公司这个外观类,你只需要给钱它,它就会自动帮你去投资银行和股票,但是你不知道是怎么投资的。(迪米特法则)
如果是你自己去投资,你去要去银行,又要去股市,而有了外观类(基金公司),就只需要知道基金公司就行了。(外观模式使用示例)