老师,这句话要怎么理解

老师,这句话要怎么理解

简单工厂式将创建对象的步骤放在父类进行,而工厂方法式延迟到子类中进行

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,可以参考以下思路来理解:

简单工厂模式是由一个工厂对象来决定创建一类产品的实例,将所有产品类都封装在一个工厂类中,然后根据不同的传入参数得到对应的产品实例,这一系列操作都是在一个工厂类中完成的(包括创建对象的步骤)。

// 创建工厂类
var UserFactory = function (role) {
// 创建产品类 function Admin() { this.name = "管理员", this.viewPage = ['首页', '查询', '权限管理'] } function User() { this.name = '普通用户', this.viewPage = ['首页', '查询'] }
// 工厂函数:根据不同的传入参数得到对应的产品实例 switch (role) { case 'admin': return new Admin(); break; case 'user': return new User(); break; default: throw new Error('参数错误, 可选参数: admin、user'); } } var admin = UserFactory('admin'); var user = UserFactory('user');

在简单工厂模式中,当需求发生变化时,不仅仅需要添加类,还要修改工厂函数,而工厂方法模式则使用继承,把对象的创建委托给子类,子类实现工厂来创建对象,也就是将创建对象的工作推迟到子类当中。这样的好处是在添加类时,只需要在工厂类的原型里添加即可,而不需要修改工厂函数。

//安全模式创建的工厂方法函数,用于创建实例对象
var UserFactory = function (role) {
    if (this instanceof UserFactory) {
        var s = new this[role]();
        return s;
    } else {
        return new UserFactory(role);
    }
}
//在工厂方法函数的原型中添加类
UserFactory.prototype = {
    Admin: function () {
        this.name = "管理员",
        this.viewPage = ['首页', '查询', '权限管理']
    },
    User: function () {
        this.name = '用户',
        this.viewPage = ['首页', '查询']
    }
   }
//调用
var admin = UserFactory('Admin');
var user = UserFactory('User');

​祝学习愉快!

千手血魂 提问者 2021-08-02 16:43:00

懂了,谢谢老师!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师