欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式系列 - 外观模式

程序员文章站 2023-02-20 21:28:34
外观模式通过创建新的对象访问接口,从而隐藏对象内部发复复杂性 介绍 外观模式属于结构型模式,通过定义的外观器,从而简化了具体对象的内部复杂性。这种模式通过在复杂系统和上层调用之间添加了一层,这一层对上提供简单接口,对下执行复杂操作。 类图描述 通过上图我们可以发现, 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();
    }
}

总结

外观模式不符合开闭原则,如果外观类执行的操作过于复杂的话,则不建议使用这种模式。