javascript设计模式(一)工厂模式

工厂模式分为两种,简单工厂模式和抽象工厂模式。

  • 简单工厂模式
function createPeople(name, time, gender) {
        let p = new Object();
        p.name = name;
        p.time = time;
        p.gender = gender;
        p.getName = function () {
            return this.name
        };
        return p
    }
let p1 = createPeople('scc','1995','male'); //

可以解决多个类似对象声明的问题;也就是为了解决实例化对象产生重复的问题。

  • 抽象工厂模式(其实就是复杂点的工厂模式)

复杂的工厂模式定义是:用父类来创建子类,可以在各自的子类里定义各自需要的方法。

    // 定义自行车的构造函数
    var BicycleShop = function (name) {
        this.name = name;
        this.method = function () {
            return this.name;
        }
    };
    BicycleShop.prototype = {
        sellBicycle: function (model) {
            var bicycle = this.createBicycle(model);

            // 执行A业务逻辑
            bicycle.A();

            // 执行B业务逻辑
            bicycle.B();

            return bicycle;
        },
        createBicycle: function (model) {
            throw new Error("父类是抽象类不能直接调用,需要子类重写该方法");
        }
    };

    // 实现原型继承
    function extend(Sub, Sup) {
        //Sub表示子类,Sup表示超类(父类)
        var F = function () {};

        F.prototype = Sup.prototype;

        Sub.prototype = new F();

        Sub.prototype.constructor = Sub;

        if (Sup.prototype.constructor === Object.prototype.constructor) {
            // 检测超类原型的构造器是否为原型自身
            Sup.prototype.constructor = Sup;
        }

    }
    var BicycleChild = function (name) {

        this.name = name;

        // 继承构造函数父类中的属性和方法
        BicycleShop.call(this, name);
    };

    // 子类继承父类原型方法 
    extend(BicycleChild, BicycleShop);

    // BicycleChild 子类重写父类的方法
    BicycleChild.prototype.createBicycle = function () {
        var A = function () {
            console.log("执行A业务操作");
        };
        var B = function () {
            console.log("执行B业务操作");
        };
        return {
            A: A,
            B: B
        }
    }
    var childClass = new BicycleChild("scc");
    console.log(childClass);

两个好处:
第一:弱化对象间的耦合,防止代码的重复。在一个方法中进行类的实例化,可以消除重复性的代码。第二:重复性的代码可以放在父类去编写,子类继承于父类的所有成员属性和方法,子类只专注于实现自己的业务逻辑。

你可能感兴趣的:(javascript设计模式(一)工厂模式)