外观模式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade
{
//苹果类
class Apple
{
public void PlantApple()
{
Console.WriteLine("种植苹果树");
}
}
//橘子类
class Orange
{
public void PlantApple()
{
Console.WriteLine("种植橘子树");
}
}
//香蕉类
class Banana
{
public void PlantApple()
{
Console.WriteLine("种植香蕉树");
}
}
//种植类
public class Plant
{
//创建苹果类
Apple apple = new Apple();
//创建橘子类类
Orange orange = new Orange();
//创建香蕉类
Banana banana = new Banana();
public void PlantAppleOrange()
{
Console.WriteLine("-----北京果园-----");
apple.PlantApple();//种植苹果树
orange.PlantApple();//种植橘子树
}
public void PlantAppleBanana()
{
Console.WriteLine("-----上海果园-----");
apple.PlantApple();//种植苹果树
banana.PlantApple();//种植香蕉树
}
}
class Program
{
static void Main(string[] args)
{
Plant plant = new Plant();
//北京果园 种植苹果和橘子
plant.PlantAppleOrange();
//上海果园种植苹果和橘子
plant.PlantAppleBanana();
}
}
}
代码解析:
上述代码实现了外观模式,代码中首先创建了三个水果类Apple、Orange和Banana,然后创建了种植类Plant,该类相当于外观模式中的外观类,该类主要对前面创建的三个水果类进行封装调用,PlantAppleOrange方法封装了Apple类的PlantApple方法和Orange类的PlantOrange方法;而 PlantOrangeBanana 方法则封装了 Orange 类的 PlantOrange 方法和 Banana 类的PlantBanana方法。通过Plant类实现了调用者与三个水果类的隔离,实现了对这三个水果类的功能整合。
说明:
外观模式主要为复杂的系统提供统一的接口,是复杂系统功能的整合,并不增加系统的功能,实现了调用者和系统之间的一种松耦合关系。