1. 程式人生 > 實用技巧 >cordova獲取Android系統許可權和Android許可權列表

cordova獲取Android系統許可權和Android許可權列表

簡單工廠模式

簡單工廠模式又叫靜態工廠方法,由一個工廠物件決定建立某一種物件類的例項,這種型別的設計模式屬於建立型模式,在簡單工廠模式中,可以根據引數的不同返回不同類的例項,簡單工廠模式專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。

描述

簡單工廠模式目的是定義一個建立物件的介面,讓其子類自己決定例項化哪一個工廠類,工廠模式使其建立過程延遲到子類進行,主要解決介面選擇的問題,讓其子類實現工廠介面,返回的也是一個抽象的產品。

模式結構

  • Factory: 工廠角色,工廠角色負責實現建立所有例項的內部邏輯。
  • Product: 抽象產品角色,抽象產品角色是所建立的所有物件的父類,負責描述所有例項所共有的公共介面。
  • ConcreteProduct: 具體產品角色,具體產品角色是建立目標,所有建立的物件都充當這個角色的某個具體類的例項。

優點

  • 工廠類含有必要的判斷邏輯,可以決定在什麼時候建立哪一個產品類的例項,客戶端可以免除直接建立產品物件的責任,而僅僅消費產品,簡單工廠模式通過這種做法實現了對責任的分割,它提供了專門的工廠類用於建立物件。
  • 客戶端無須知道所建立的具體產品類的類名,只需要知道具體產品類所對應的引數即可,對於一些複雜的類名,通過簡單工廠模式可以減少使用者的記憶量。
  • 通過引入配置檔案,可以在不修改任何客戶端程式碼的情況下更換和增加新的具體產品類,在一定程度上提高了系統的靈活性。

缺點

  • 由於工廠類集中了所有產品建立邏輯,一旦不能正常工作,整個系統都要受到影響。
  • 使用簡單工廠模式將會增加系統中類的個數,在一定程式上增加了系統的複雜度和理解難度。
  • 系統擴充套件困難,一旦新增新產品就不得不修改工廠邏輯,在產品型別較多時,有可能造成工廠* 邏輯過於複雜,不利於系統的擴充套件和維護。
  • 簡單工廠模式由於使用了靜態工廠方法,造成工廠角色無法形成基於繼承的等級結構。

實現

簡單工廠模式是將實際建立物件的工作推遲到子類中,這樣核心類就變成了抽象類,但是在JavaScript中很難像普通面向物件那樣去實現建立抽象類,所以在JavaScript中只需要參考它的核心思想即可。

class Shape { // 基類
    say(){
        console.log(this.name);
    }
}

class Rectangle extends Shape{ // 長方形產品
    constructor(){
        super();
        this.name = "Rectangle";
    }
}

class Square extends Shape{ // 正方形產品
    constructor(){
        super();
        this.name = "Square";
    }
}

class Circle extends Shape{ // 圓形產品
    constructor(){
        super();
        this.name = "Circle";
    }
}

class ShapeFactory{ // 產品工廠
    getShape(shape) {
        switch (shape.toLowerCase()) {
          case "rectangle":
            return new Rectangle();
          case "square":
            return new Square();
          case "circle":
            return new Circle();
          default:
            throw new Error("引數錯誤")
        }
    }
}

var shapeFactory = new ShapeFactory();

var rectangle = shapeFactory.getShape("rectangle");
rectangle.say(); // Rectangle

var square = shapeFactory.getShape("square");
square.say(); // Square

var circle = shapeFactory.getShape("circle");
circle.say(); // Circle

每日一題

https://github.com/WindrunnerMax/EveryDay

參考

https://juejin.im/post/6844903653774458888
https://www.runoob.com/design-pattern/factory-pattern.html
https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/simple_factory.html