外觀模式通過創建新的對象訪問介面,從而隱藏對象內部發複復雜性 介紹 外觀模式屬於結構型模式,通過定義的外觀器,從而簡化了具體對象的內部複雜性。這種模式通過在複雜系統和上層調用之間添加了一層,這一層對上提供簡單介面,對下執行複雜操作。 類圖描述 通過上圖我們可以發現, IShape 為行為介面,然後 ...
外觀模式通過創建新的對象訪問介面,從而隱藏對象內部發複復雜性
介紹
外觀模式屬於結構型模式,通過定義的外觀器,從而簡化了具體對象的內部複雜性。這種模式通過在複雜系統和上層調用之間添加了一層,這一層對上提供簡單介面,對下執行複雜操作。
類圖描述
通過上圖我們可以發現,IShape 為行為介面,然後 Rectangle Square Circle 為具體的對象實體類型, ShapeMarker 為我們定義的外觀器,通過它,我們能間接訪問複雜對象。
代碼實現
1、定義對象介面
public interface IShape
{
void Draw();
}
2、定義實體對象類型
public class Circle:IShape
{
public void Draw() => Console.WriteLine("Circle:Draw()");
}
public class Rectangle:IShape
{
public void Draw() => Console.WriteLine("Rectangle:Draw()");
}
public class Square:IShape
{
public void Draw() => Console.WriteLine("Square:Draw()");
}
3、定義外觀類
public class ShapeMarker
{
private IShape circle;
private IShape rectangle;
private IShape square;
public ShapeMarker()
{
circle = new Circle();
rectangle = new Rectangle();
square = new Square();
}
public void DrawCircle() => circle.Draw();
public void DrawRectangle() => rectangle.Draw();
public void DrawSquare() => square.Draw();
}
4、上層調用
class Program
{
static void Main(string[] args)
{
var shapeMarker = new ShapeMarker();
shapeMarker.DrawCircle();
shapeMarker.DrawRectangle();
shapeMarker.DrawSquare();
Console.ReadKey();
}
}
總結
外觀模式不符合開閉原則,如果外觀類執行的操作過於複雜的話,則不建議使用這種模式。