记录:
外观模式:把一系列复杂的子系统封装到外观类中,从而简化客户端的使用过程,同时降低客户端和各功能子类之间的耦合。外观模式的一大特点就是简化客户端的操作。
外观模式的基本结构:外观类持有各子类对象,同时提供一系列简化方法,封装各子类模块的操作,供客户端调用,从而达到降低客户端操作复杂性的目的。原先客户端需要清楚明了各功能模块的具体功能,但有了外观类,这就不是必须的了,客户端只要熟悉外观类,通过调用外观对象的接口就可,当然客户端,也可以直接操作各子类,因为外观类持有子类对象。
外观模式的缺点:违背了开闭原则,一旦有新的子类加入,就需要修改外观类。这可以通过抽象外观类来避免。
代码实现:以烧茶,做饭为例,仅为展示外观模式代码大致结构。
功能子类:TeaMaker ,Cooker
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FacadePattern.facade
{
class TeaMaker
{
public void boilWater()
{
Console.WriteLine("-------烧水");
}
public void makeTea() {
Console.WriteLine("-------沏茶");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FacadePattern.facade
{
class Cooker
{
public void WashVegetable()
{
Console.WriteLine("-------洗菜");
}
public void Cut() {
Console.WriteLine("-------切菜");
}
public void Boil()
{
Console.WriteLine("-------蒸煮");
}
}
}
外观类:Waiter
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FacadePattern.facade
{
class Waiter
{
public TeaMaker tea;
public Cooker cooker;
public Waiter(){
tea = new TeaMaker();
cooker = new Cooker();
}
public void OrderTea() {
tea.boilWater();
tea.makeTea();
}
public void OrderFood() {
cooker.WashVegetable();
cooker.Cut();
cooker.Boil();
}
}
}
客户端测试:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FacadePattern.facade
{
class Client
{
static void Main(string[] args)
{
Waiter waiter = new Waiter();
waiter.OrderTea();
waiter.OrderFood();
}
}
}
外观模式和中介者模式,代理模式的对比,待续。。。