定义:外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个统一的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式包含如下角色:
Facade(外观角色):负责子系统的的封装调用
SubSystem(子系统角色):具体的子系统,实现由外观模式Facade对象来调用的具体任务
举例
去水果店买水果
- 子系统角色
//抽象系统,派生出三个子系统
abstract class Fruit
{
public abstract void BuyFruit();
}class Apple : Fruit
{
public override void BuyFruit()
{
Console.WriteLine("买苹果");
}
}class Orange : Fruit
{
public override void BuyFruit()
{
Console.WriteLine("买橙子");
}
}class Peach : Fruit
{
public override void BuyFruit()
{
Console.WriteLine("买桃子");
}
}
- 外观角色
class FruitShop
{
private Apple apple = new Apple();
private Orange orange = new Orange();
private Peach peach = new Peach();public void BuyApple()
{
apple.BuyFruit();
}public void BuyOrange()
{
orange.BuyFruit();
}
public void BuyPeach()
{
peach.BuyFruit();
}
public void BuyAllFruit()
{
apple.BuyFruit();
orange.BuyFruit();
peach.BuyFruit();
}
}
- 客户类
class Program
{
static void Main(string[] args)
{
FruitShop fruitShop = new FruitShop();
fruitShop.BuyApple();
fruitShop.BuyOrange();
fruitShop.BuyPeach();
fruitShop.BuyAllFruit();
}
}
总结:每个子系统都负责一个独立的功能模块,可以是同一个基类的子类,也可以不是,外观类则是创建了每个子系统类的对象,在自己定义的方法中调用子系统的方法,进行封装使用。