前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JS工厂模式_工厂模式进行封装

JS工厂模式_工厂模式进行封装

作者头像
全栈程序员站长
发布2022-08-04 09:15:00
8380
发布2022-08-04 09:15:00
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

工厂模式简述

工厂模式,顾名思义,就是为了创造对象。

工厂模式类似于现实的工厂生产线,可以生产出大量类似的商品。

工厂模式可以分为简单工厂模式跟复杂工厂模式。以下将详细介绍。

简单工厂模式

先来看一个例子~~~

代码语言:javascript
复制
        function CarFactory (brand, price) {
            var car = new Object();
            car.brand = brand;
            car.price = price;
            car.getPrice = function () {
                return this.price;
            }
            return car;
        }
        var car1 = CarFactory("牌子A", 10000);
        var car2 = CarFactory("牌子B", 20000);
        console.log(JSON.stringify(car1)); // {
   
   "brand":"牌子A","price":10000}
        console.log(JSON.stringify(car2)); // {
   
   "brand":"牌子B","price":20000}
        console.log(typeof car1); // object
        console.log(typeof car2); // object
        console.log(car1 instanceof Object); // true
复制代码

如上代码:函数CarFactory接受两个参数brand, price,最终返回一个对象。如果多次调用这个函数,每次将返回一个新的对象,这就跟工厂的生产线一样。

简单工厂模式的优点在于:能解决多个相似的问题,减少大量冗余代码。

当然,简单工厂模式的缺点也很突出:即无法识别对象类型(typeof car1 === ‘object’)

为了解决简单工厂模式无法识别对象类型的问题,复杂工厂模式便登场了~~~

复杂工厂模式

再看一个例子~~~

代码语言:shell
复制
        function ComplexCarFactory(brand, price) {
            this.brand = brand;
            this.price = price;
        }
        ComplexCarFactory.prototype = {
            constructor: ComplexCarFactory,
            sellCar: function(){
                var speed = this.getSpeed(this.brand);
                console.log(this.brand + '的车子售价:' + this.price + '元人民币,限速' + speed + '公里每小时');
            },
            getSpeed : function(brand){
                throw new Error("父类是抽象类不能直接调用,需要子类重写该方法");
            }
        };
        var CarChild = function(brand, price) {
            this.brand = brand;
            this.price = price;
            // 继承构造函数父类中的属性和方法
            ComplexCarFactory.call(this, brand, price);
        };
        // 子类继承父类原型方法
        CarChild.prototype = Object.create(ComplexCarFactory.prototype);
        // CarChild 子类重写父类的方法
        CarChild.prototype.getSpeed = function(brand){
            var speed = null;
            if(brand === '牌子C'){
                return 100;
            }
            return 50;
        }
        var car3 = new CarChild("牌子C", 3000);
        console.log(car3); // CarChild {brand: "牌子C", price: 3000}
        console.log(car3.sellCar()); // 牌子C的车子售价:3000元人民币,限速50公里每小时
复制代码

如上代码:

ComplexCarFactory为父类,CarChild为子类,CarChild继承自ComplexCarFactory。

ComplexCarFactory不在进行对象实例化,只对创建过程中的一般性问题进行处理,ComplexCarFactory就像是Java中的抽象类,必须被子类重写,否则调用ComplexCarFactory的sellCall方法时就会抛出异常。

CarChild继承自ComplexCarFactory,同时重写了父类的方法,CarChild类实例后的对象之间是相互独立的,具体的业务逻辑会放在子类中进行编写。

总结

工厂模式最重要的优点是:可以在父类实现一些相同的方法,而具体要实现的业务逻辑可以放在子类中,通过子类重写父类的方法,去实现自己的业务逻辑。

工厂模式弱化对象间的耦合,父类专注于实现重复性的功能,子类专注于具体的业务逻辑,这样可以减少冗余代码。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/107159.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工厂模式简述
  • 简单工厂模式
  • 复杂工厂模式
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档