定義:定義一個統一的接口,用來訪問子系統中的一羣接口。外觀定義了一個高層接口,讓子系統更容易使用。
UML類圖:
C++實現:
#include<iostream>
using namespace std;
class Shape
{
virtual void Draw() = 0;
};
class Circle :public Shape
{
public:
// 通過 Shape 繼承
virtual void Draw() override
{
cout << "Draw Circle!" << endl;
}
};
class Sphere :public Shape
{
public:
// 通過 Shape 繼承
virtual void Draw() override
{
cout << "Draw Sphere!" << endl;
}
};
class Cube :public Shape
{
public:
// 通過 Shape 繼承
virtual void Draw() override
{
cout << "Draw Cube!" << endl;
}
};
class Context
{
Circle* circle;
Sphere* sphere;
Cube* cube;
public:
Context()
{
circle = new Circle();
sphere = new Sphere();
cube = new Cube();
}
void DrawCircle()
{
circle->Draw();
}
void DrawSphere()
{
sphere->Draw();
}
void DrawCube()
{
cube->Draw();
}
~Context()
{
delete circle;
delete sphere;
delete cube;
}
};
int main()
{
Context* context=new Context();
context->DrawCircle();
context->DrawSphere();
context->DrawCube();
delete context;
return 0;
}
C#實現:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using static System.Console;
namespace ConsoleApp1
{
public interface Shape
{
void Draw();
}
public class Circle:Shape
{
public void Draw()
{
WriteLine("Draw Circle!");
}
}
public class Sphere : Shape
{
public void Draw()
{
WriteLine("Draw Sphere!");
}
}
public class Cube : Shape
{
public void Draw()
{
WriteLine("Draw Cube!");
}
}
public class Context
{
private Circle circle;
private Sphere sphere;
private Cube cube;
public Context()
{
circle = new Circle();
sphere = new Sphere();
cube = new Cube();
}
public void DrawCircle()
{
circle.Draw();
}
public void DrawSphere()
{
sphere.Draw();
}
public void DrawCube()
{
cube.Draw();
}
}
class Program
{
static void Main(string[] args)
{
Context context = new Context();
context.DrawCircle();
context.DrawCube();
context.DrawSphere();
}
}
}