一,理解:
1,书上的说法:
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这子系统更加容易使用。
2,我自己的理解:
简化客户端的代码,可以一次性调用很多方法
二,用法:
1,什么时候用?
(1)在开发阶段,子系统因为不断重构演化而越来越复杂,当在客户端调用的时候比较多的时候增加,方便调用。
(2)在维护一个遗留的大型系统的时候,可以通过外观模式与遗留代码交互所有复杂的工作。
2,如何用?
在系统和客户端之间添加一个外观类,使外观类和客户端之间耦合
3,重点是什么?
外观类的敲定,在外观类中将代码进行分类,从而使代码能够减少复杂性
4,优秀点是什么?
(1)优点:
- 提高灵活性
- 方便客户端的调用
(2)缺点:
- 不符合开闭原则,需要改的时候会很麻烦
4,相关举例
(1)公司来新人的时候,有很多的流程,例如领电脑,分座位,去人事处报告等等,所以需要有一个主管来管理这些新人以供他们找到正确的地方
(2)三层架构的时候,每一层之间都会建立外观模式
三,代码展示:
以下是书上的例子:
有关买股票
股票:股票1,股票2,股票3,国债1,房地产1
方法:买,卖
1,写出所有的类:
class Stock1
{
public void Sell()
{
Console.WriteLine("卖出股票1");
}
public void Buy()
{
Console.WriteLine("买入股票1");
}
}
class Stock2
{
public void Sell()
{
Console.WriteLine("卖出股票2");
}
public void Buy()
{
Console.WriteLine("买入股票2");
}
}
class Stock3
{
public void Sell()
{
Console.WriteLine("卖出股票2");
}
public void Buy()
{
Console.WriteLine("买入股票2");
}
}
class NationalDebt
{
public void Sell()
{
Console.WriteLine("卖出国债");
}
public void Buy()
{
Console.WriteLine("买入国债");
}
}
class Realty
{
public void Sell()
{
Console.WriteLine("卖出房地产");
}
public void Buy()
{
Console.WriteLine("买入房地产");
}
}
2,把所有类的方法放到一个相同的方法中,如下
class funt
{
Stock1 one;
Stock2 two;
Stock3 three;
NationalDebt four;
Realty five;
public funt ()
{
one = new Stock1();
two = new Stock2();
three = new Stock3();
four = new NationalDebt();
five = new Realty();
}
public void Sell()
{
one.Sell();
two.Sell();
three.Sell();
four.Sell();
five.Sell();
}
public void Buy()
{
one.Buy();
two.Buy();
three.Buy();
four.Buy();
five.Buy();
}
}
3,客户端的代码:
static void Main(string[] args)
{
funt haha = new funt();
haha.Buy();
haha.Sell();
Console.ReadKey();
}
4,结果: