概要
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
类图
运行
代码
using System;
namespace 外观模式
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Client client = new Client();
client.main();
Console.ReadLine();
}
}
interface IFacade
{
void sort();
void run();
void aim();
void amphibious();
void gps();
}
abstract class BaseOrdinaryTank
{
public virtual void exe()
{
sort();
run();
aim();
}
public abstract void sort();
public abstract void run();
public abstract void aim();
}
abstract class BaseAdvancedTank: BaseOrdinaryTank
{
public override void exe()
{
base.exe();
amphibious();
gps();
}
public abstract void amphibious();
public abstract void gps();
}
class InnerFunA
{
public void sort()
{
Console.WriteLine("射击");
}
public void run()
{
Console.WriteLine("跑");
}
}
class InnerFunB
{
public void aim()
{
Console.WriteLine("红外瞄准");
}
public void amphibious()
{
Console.WriteLine("水陆两栖");
}
public void gps()
{
Console.WriteLine("卫星定位");
}
}
class Facade : IFacade
{
InnerFunA innerFunA = new InnerFunA();
InnerFunB innerFunB = new InnerFunB();
public void aim()
{
innerFunB.aim();
}
public void amphibious()
{
innerFunB.amphibious();
}
public void gps()
{
innerFunB.gps();
}
public void run()
{
innerFunA.run();
}
public void sort()
{
innerFunA.sort();
}
}
class OrdinaryTank : BaseOrdinaryTank
{
IFacade facade;
public OrdinaryTank(IFacade facade)
{
this.facade = facade;
}
public override void aim()
{
this.facade.aim();
}
public override void run()
{
this.facade.run();
}
public override void sort()
{
this.facade.sort();
}
}
class AdvancedTank : BaseAdvancedTank
{
IFacade facade;
public AdvancedTank(IFacade facade)
{
this.facade = facade;
}
public override void aim()
{
this.facade.aim();
}
public override void amphibious()
{
this.facade.amphibious();
}
public override void gps()
{
this.facade.gps();
}
public override void run()
{
this.facade.run();
}
public override void sort()
{
this.facade.sort();
}
}
class Client
{
public void main()
{
Facade facade = new Facade();
OrdinaryTank ordinaryTank = new OrdinaryTank(facade);
AdvancedTank advancedTank = new AdvancedTank(facade);
Console.WriteLine("普通坦克:");
ordinaryTank.exe();
Console.WriteLine();
Console.WriteLine("高配坦克:");
advancedTank.exe();
}
}
}