外观模式(Facade Pattern)

对外提供单一接口,来隐藏系统的复杂性

外观模式的实例

比如目前有几种形状类型,假设这几个形状设计的特别复杂,这个时候你肯定不愿意修改这些接口然后来提供新的接口

  1. class Rectangle {
  2. draw() {
  3. console.log("Rectangle::draw()");
  4. }
  5. }
  6. class Square {
  7. draw() {
  8. console.log("Square::draw()");
  9. }
  10. }
  11. class Circle {
  12. draw() {
  13. console.log("Circle::draw()");
  14. }
  15. }

那么可以用外观模式来隐藏这些复杂的接口调用,对外暴露更加单一的接口调用方式

  1. class ShapeMaker {
  2. constructor() {
  3. this.circle = new Circle();
  4. this.rectangle = new Rectangle();
  5. this.square = new Square();
  6. }
  7. drawCircle(){
  8. this.circle.draw();
  9. }
  10. drawRectangle(){
  11. this.rectangle.draw();
  12. }
  13. drawSquare(){
  14. this.square.draw();
  15. }
  16. }

那么我们使用的时候就更不需要考虑里面复杂的接口,而直接使用外观模式暴露的接口就好了

  1. const shapeMaker = new ShapeMaker();
  2. shapeMaker.drawCircle();
  3. shapeMaker.drawRectangle();
  4. shapeMaker.drawSquare();
  5. /**
  6. * output:
  7. * Circle::draw()
  8. * Rectangle::draw()
  9. * Square::draw()
  10. */

外观模式的优势

隐藏内部的复杂性,这样能减少一些对内部修改的可能,同时对外暴露单一功能接口,也有利于降低复杂性。

上一页(装饰器模式)

下一页(享元模式)