1. 程式人生 > >設計模式系列 - 外觀模式

設計模式系列 - 外觀模式

外觀模式通過建立新的物件訪問介面,從而隱藏物件內部發複復雜性

介紹

外觀模式屬於結構型模式,通過定義的外觀器,從而簡化了具體物件的內部複雜性。這種模式通過在複雜系統和上層呼叫之間添加了一層,這一層對上提供簡單介面,對下執行復雜操作。

類圖描述

通過上圖我們可以發現,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();
    }
}

總結

外觀模式不符合開閉原則,如果外觀類執行的操作過於複雜的話,則不建議使用這種模式。