什么是工厂模式: 工厂模式其实就是封装对象的创建过程,使得创建对象的逻辑与使用对象的逻辑分离开来。
简单工程模式 简单工厂模式又叫静态工厂模式,由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象。
例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 class User { constructor (opt ) { this .name = opt.name ; this .viewPage = opt.viewPage ; } static getInstance (role ) { switch (role) { case 'superAdmin' : return new User ({ name : '超级管理员' , viewPage : ['首页' , '通讯录' , '发现页' , '应用数据' , '权限管理' ] }); break ; case 'admin' : return new User ({ name : '管理员' , viewPage : ['首页' , '通讯录' , '发现页' , '应用数据' ] }); break ; case 'user' : return new User ({ name : '普通用户' , viewPage : ['首页' , '通讯录' , '发现页' ] }); break ; default : throw new Error ('参数错误, 可选参数:superAdmin、admin、user' ) } } } let superAdmin = User .getInstance ('superAdmin' );let admin = User .getInstance ('admin' );let normalUser = User .getInstance ('user' );console .log (superAdmin)
工厂方法模式 将实际创建对象工作推迟到子类当中,核心类就成了抽象类。这样添加新的类时就无需修改工厂方法,只需要将子类注册进工厂方法的原型对象中即可。;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 function FunctionFactory (role ) { if (!(['admin' , 'developer' ].indexOf (role) > -1 )){ console .log ('参数只能为 admin 或 developer' ); } if (this instanceof FunctionFactory ) { return this [role](); } return new FunctionFactory (role); } FunctionFactory .prototype .show = function ( ) { var str = '是一个' + this .role + ', 权限:' + this .permissions .join (', ' ); console .log (str) } FunctionFactory .prototype .admin = function (permissions ) { this .role = '管理员' ; this .permissions = ['设置' , '删除' , '新增' , '创建' , '开发' , '推送' , '提问' , '评论' ]; } FunctionFactory .prototype .developer = function (permissions ) { this .role = '开发者' ; this .permissions = ['开发' , '推送' , '提问' , '评论' ]; } var xm = FunctionFactory ('admin' );xm.show (); var xh = new FunctionFactory ('developer' );xh.show (); var xl = new FunctionFactory ('guest' );xl.show ();
安全工厂模式玩法的好处 1.避免使用new关键字。在JavaScript中,使用new关键字创建对象可能会带来一些安全问题,例如可能会被恶意代码利用创建一个用于攻击的对象。安全工厂方法避免了使用new,从而减少了这种风险。 2.可以实现封装和隐藏实现。安全工厂方法可以将关键的创建对象的代码封装在内部,从而隐藏实现细节,提高代码的安全性和可维护性。 3.更易于维护。由于安全工厂方法可以提供统一的访问接口,因此更容易进行代码的维护和升级。 4.可以提高代码的可测试性。由于安全工厂方法可以实现封装和隐藏实现,因此可以更轻松地进行单元测试和集成测试,从而提高代码的质量和可测试性。。