欢迎来到Vincentyw的博客

该来的终究会来,该走的也一定会离开。凡事都存在前因后果,因缘成熟了,果报便产生了,无法阻挡。
但是发生过了就会消失,有来就有走,一切都是过客,把握自己当下的因缘,承担起自己该承担的责任,做好眼前该做的事情,做的时候尽全力,过去便放下,放下即自在。

设计模式之外观模式

Facade(外观模式)

一、外观模式简介

外观模式(Facade)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

核心:

  • 1、为子系统中的一组接口提供一个一致的界面
  • 2、降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口
  • 3、客户端不与系统耦合,外观类与系统耦合

二、外观模式优缺点比较

优点:

  • 1、减少系统相互依赖
  • 2、提高灵活性
  • 3、提高了安全性

缺点:

  • 1、不符合开闭原则,如果要改东西很麻烦,继承重写都不合适

使用场景:

  • 1、DBUtils类
  • 2、为复杂的模块或子系统提供外界访问的模块
  • 3、预防低水平人员带来的风险

注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口

三、UML类图

四、设计实现

  步骤1:创建接口

public interface Shape {    
    void draw();
}

步骤2:创建实现接口的实体类

public class Rectangle implements Shape {
    @Override
    public void draw() {
         System.out.println("Callback Rectangle::draw method");
    }
}

public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Callback Square::draw method");
    }
}

public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Callback Circle::draw method");
    }
}

步骤3:创建外观类

public class ShapeFacade {
    private Shape r;
    private Shape c;
    private Shape s;

    public ShapeFacade() {
        this.r = new Rectangle();
        this.c = new Circle();
        this.s = new Square();
    }

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

    public void drawCircle() {
        c.draw();
    }
    
    public void drawSquare() {
        s.draw();
    } 
}

步骤4:调用者测试

public class FacadeDemo01 {
    
    public static void main(String[] args) {
        ShapeFacade sf = new ShapeFacade();
        sf.drawCircle();
        sf.drawRectangle();
        sf.drawSquare();
    }
}

步骤5:运行程序,观察结果

 

posted on 2020-04-05 22:03  VincentYew  阅读(237)  评论(0)    收藏  举报

导航