美文网首页
Facade模式(门面模式)

Facade模式(门面模式)

作者: 涅槃快乐是金 | 来源:发表于2020-12-16 10:16 被阅读0次

门面模式(Facade Pattern):互相关联的复杂类,统一整合出对外部暴露可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

介绍

  • 意图:为子系统中的一组接口提供一个一致的界面,门面模式定义了一个高层接口。
  • 主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
  • 何时使用:
    1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。
    2、定义系统的入口。
  • 优点:
    1、减少系统相互依赖。
    2、提高灵活性。
    3、提高了安全性。
  • 缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
  • 使用场景:
    1、为复杂的模块或子系统提供外界访问的模块。
    2、子系统相对独立。
    3、预防低水平人员带来的风险。

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

示例

Shape.ts 模型接口
export interface Shape {
    draw(): void;
}
Rectangle.ts 矩形类
import { Shape } from "./Shape";

export default class Rectangle implements Shape {
    public draw(): void {
        console.log("Rectangle::draw()");
    }
}
Square.ts 正方形类
import { Shape } from "./Shape";

export default class Square implements Shape {

    public draw(): void {
        console.log("Square::draw()");
    }
}
Circle.ts 圆形类
import { Shape } from "./Shape";

export default class Circle implements Shape {

    public draw(): void {
        console.log("Circle::draw()");
    }
}
ShapeMaker.ts 图形绘制门面类
import { Shape } from "./Shape";
import Circle from "./Circle";
import Rectangle from "./Rectangle";
import Square from "./Square";

export default class ShapeMaker {
    private circle: Shape;
    private rectangle: Shape;
    private square: Shape;

    constructor() {
        this.circle = new Circle();
        this.rectangle = new Rectangle();
        this.square = new Square();
    }

    public drawCircle(): void {//绘制圆形
        this.circle.draw();
    }
    public drawRectangle(): void {//绘制矩形
        this.rectangle.draw();
    }
    public drawSquare(): void {//绘制正方形
        this.square.draw();
    }
}
index.ts
import ShapeMaker from "./ShapeMaker";

const shapeMaker: ShapeMaker = new ShapeMaker();

shapeMaker.drawCircle();
shapeMaker.drawRectangle();
shapeMaker.drawSquare();      
result
Circle::draw()
Rectangle::draw()
Square::draw()

类图

类图

角色

  • Facade (门面)
    Facde角色向系统外部提供统一接口。示例中ShapeMaker类扮演该角色
  • 其他角色
    Facade角色调用这些角色进行工作,但是其他角色各自完成自己的工作,并不知道Facade角色,示例中的Circle、Rectangle、Square扮演该角色
  • Client(请求角色)
    负责调用Facade角色,并不包括在Facade模式中

相关文章

  • Android 设计模式入门到精通之十:外观模式(Facade

    外观模式(Facade Pattern,门面模式) 1. 概念 Facade Pattern: Provide a...

  • Facade模式(门面模式)

    门面模式(Facade Pattern):互相关联的复杂类,统一整合出对外部暴露可以访问系统的接口。这种类型的设计...

  • 设计模式(结构型)-- 门面/外观模式

    门面模式的原理与实现 门面模式,也叫外观模式,英文全称是 Facade Design Pattern。在 GoF ...

  • 结构型-Facade

    门面模式的原理与实现 门面模式,也叫外观模式,英文全称是 Facade Design Pattern。在 GoF ...

  • 门面模式(Facade)

    Facade模式的几个要点 从客户程序的角度来看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与...

  • 门面模式(Facade)

    什么是门面模式? 门面模式也叫外观模式。是指通过定义一个门面对象,对外提供高层次的接口,客户端和系统内部的子系统通...

  • 门面模式(facade)

    一句话总结 定义高层接口,使子系统更容易使用。 内容 门面模式又称为外观模式,提供一个统一的接口,用来子系统的一群...

  • 外观模式(Facede)

    本文参考自: 《JAVA设计模式》之外观模式(Facade) 1. 作用 外观模式也叫门面模式,门面模式是对象的结...

  • 门面模式

    门面模式,也叫外观模式,英文全称是 Facade Design Pattern。 翻译成中文就是:门面模式为子系统...

  • 常用开源框架中设计模式使用分析- 门面模式(Facade Pat

    七、 门面模式(Facade Pattern) 7.1 介绍 门面模式是一种结构性模式,它通过新增一个门面类对外暴...

网友评论

      本文标题:Facade模式(门面模式)

      本文链接:https://www.haomeiwen.com/subject/ojdggktx.html