原创

设计模式之外观模式

作者:cndz 围观群众:585 更新于 标签:设计模式外观模式外面模式讲解

外观模式是一种结构型设计模式,它为复杂的子系统提供了一个简单的接口,用户通过这个接口来访问子系统中的功能,同时也隐藏了子系统的复杂性。在外观模式中,一个高层接口可以封装多个低层接口,从而简化了客户端的代码。

优缺点

优点

  • 简化了客户端的调用过程,隐藏了子系统的复杂性,降低了客户端与子系统之间的耦合度。
  • 通过定义一个外观类,可以使得子系统的接口更加清晰明了,易于使用和维护。

缺点

  • 外观模式存在一个缺点,就是增加了系统的复杂度。因为在增加新的功能时,需要增加新的接口和实现,这样就会增加系统的复杂度。因此,需要在设计时考虑好外观类的设计,避免过度的增加接口和实现。

Java实例

以下是一个简单的Java实例,演示了如何使用外观模式来访问子系统中的功能。在这个例子中,我们创建了一个 ShapeMaker 外观类,它封装了 RectangleCircle 类的接口,并提供了 drawRectangle()drawCircle() 方法,用于绘制矩形和圆形。

// 外观类
public class ShapeMaker {
    private Shape rectangle;
    private Shape circle;

    public ShapeMaker() {
        rectangle = new Rectangle();
        circle = new Circle();
    }

    public void drawRectangle() {
        rectangle.draw();
    }

    public void drawCircle() {
        circle.draw();
    }
}

// 形状接口
public interface Shape {
    void draw();
}

// 矩形类
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Rectangle::draw()");
    }
}

// 圆形类
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Circle::draw()");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        ShapeMaker shapeMaker = new ShapeMaker();

        shapeMaker.drawRectangle();
        shapeMaker.drawCircle();
    }
}

在上面的例子中,我们可以看到,客户端只需要使用 ShapeMaker 类的接口,就可以完成绘制矩形和圆形的操作,而不需要直接使用 RectangleCircle 类的接口。这就使得客户端的代码更加简洁,同时也隐藏了子系统的复杂性。

应用场景

在实际开发中,外观模式可以应用于以下场景:

  1. 当一个复杂子系统的各个部分之间的通信比较复杂,导致系统难以维护和扩展时,可以使用外观模式将子系统的接口和实现进行封装,让调用者只需要通过外观类来访问子系统,从而避免了直接访问子系统的复杂性。
  2. 当系统需要给客户端提供一个简单的接口,同时又需要对子系统进行封装时,可以使用外观模式。通过这种方式,系统可以为每个子系统提供一个简单的接口,这些接口可以组合成一个外观类,方便客户端进行访问。
  3. 当系统需要将多个子系统进行整合时,可以使用外观模式。通过将多个子系统的接口进行封装,然后提供一个统一的接口给客户端使用,从而实现了多个子系统的整合。

总之,外观模式可以让系统更加简单,同时也可以降低系统的复杂度和耦合度,提高系统的可维护性和可扩展性。

总结

外观模式是一种非常实用的设计模式,它可以将复杂的子系统封装起来,提供一个简单的接口给客户端使用。通过这个接口,客户端可以方便地访问子系统中的功能,同时也可以隐藏子系统的复杂性。在应用外观模式时需要注意,不能过度地使用外观模式,否则会增加系统的复杂度。因此,需要在设计时考虑好外观类的设计,避免过度的增加接口和实现。