设计模式9—工厂模式【创建型】

参考链接

一、概念:

  1. 把实现同一事情的相同代码,放到一个函数中,以后如果再想实现这个功能,就不需要重新编写这些代码了,只要执行当前的函数即可。
    工厂模式本质就是代码功能的复用,没什么男理解的。关键是要了解和 构造函数 的区别,他们都可以创建一个对象。
    function createPerson(name, age) {
        var obj = {};
        obj.name = name;
        obj.age = age;
        obj.writeJs = function () {
            console.log(this.name + 'write js');
        }
        return obj;
    }
    
    var p1 = createPerson('mengzhe' , 26);
    p1.writeJs();
    
    var p2 = createPerson('iceman' , 25);
    p2.writeJs();
  2. 工厂方法创建对象的不足:
        function createPerson(name, age) {
            var obj = {};
            obj.name = name;
            obj.age = age;
            obj.writeJs = function () {
                console.log(this.name + 'write js');
            }
            return obj;
        }
    
        function createDog(name, age){
            var obj = {};
            obj.name = name;
            obj.age = age;
            obj.say = function () {
                console.log('dog say:', this.name);
            }
            return obj;
        }
    
    
        var p1 = createPerson('杨利伟', 26);
        var p2 = createDog('旺财', 3);
    
        // 人 和 狗 是用不同的工厂方法创建的,但是他们的构造函数却是一样的。这样就无法区分他们是不同类型的对象了。
        console.log(p1);
        console.log(p2);

    用构造函数创建的对象就会指明不同的类型:,这样就可以把他们q

        function CreatePerson(name, age) {
            this.name = name;
            this.age = age;
            this.writeJs = function () {
                console.log(this.name + 'write js');
            }
        }
    
        function CreateDog(name, age) {
            this.name = name;
            this.age = age;
            this.say = function () {
                console.log('dog say:', this.name);
            }
        }
    
        let ylw = new CreatePerson("杨利伟", 28)
        let wangcai = new CreateDog("旺财", 3)
    
        console.log(ylw);
        console.log(wangcai);

总结:使用工厂方法创建的对象,使用的构造函数都是Object,所以创建的对象都是Object这个类型,就导致我们无法区分出多种不同类型的对象。
      所以 我们一般使用构造函数创建对象。

二、工厂模式、构造函数模式 区别:https://blog.csdn.net/weixin_34245749/article/details/88876336

  1、工厂模式解决了代码复用的问题,但是却没有解决对象识别的问题。即创建的所有实例都是Object类型。为了解决这一问题,就有了构造函数模式。

     即,构造函数和工厂模式区别是构造函数有出处;而工厂模式只是 表面上简化的创建相似对象。

 

posted @ 2021-07-13 15:13  吴飞ff  阅读(56)  评论(0编辑  收藏  举报