美文网首页
javascript设计模式(一)工厂模式

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

作者: Sccong | 来源:发表于2017-07-15 20:47 被阅读0次

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

    • 简单工厂模式
    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设计模式(一)工厂模式

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