01 简单工厂模式
2017-08-08 本文已影响14人
柏丘君
本系列文章是我在阅读《JavaScript 设计模式》这本书的一些笔记,这本书是国内的张容铭写的,注意和另一本外国的同名书籍进行区分。
场景
当你使用面向对象开发 web 应用时,会创建很多很多的类。比如控制登录的 Login
类,控制注册的 Register
类,和用户有关的 User
类等。
这样的类越来越多,你不得不一一记住这些类的名字,并在开发过程中初始化这些类,代码结构看起来很散乱,到处都是 new xxx
这样的语句。
简单工厂模式就是为了解决类似这种问题的:通过一个公共的工厂函数(类),根据传入的参数不同,向外暴露不同的对象。
事实上,简单工厂模式的思想不仅仅用在面向对象编程中,普通的面向过程编程也会运用这种思想,只不过我们不把它叫做简单工厂模式而已。看下面的代码:
function checkRole(role_id){
switch(role_id){
case "0":
return "超级管理员";
case "1":
return "普通管理员"
case "3":
return "注册用户"
default:
return "游客"
}
}
根据不同的角色 id
,返回相应的角色描述,这本身就是工厂模式的思想。
实现
简单工厂模式的实现比较简单:我们只需在工厂函数(类)上根据参数进行判断,然后返回特定类的实例即可。
// 足球类
class FootBall{
playFootBall(){
console.log("我是一个愉快的足球")
}
}
// 篮球类
class BasketBall{
playBasketBall(){
console.log("我是一个胖胖的篮球")
}
}
// 高尔夫球
class Golf{
playGolf(){
console.log("我是一个高贵的高尔夫")
}
}
// 简单工厂
class BallFactory{
constructor(type) {
switch(type){
case "FootBall":
return new FootBall();
case "BasketBall":
return new BasketBall();
case "Golf":
return new Golf();
}
}
}
// 创建对象
const football = new BallFactory("FootBall")
const basketball = new BallFactory("BasketBall")
const golf = new BallFactory("Golf")
football.playFootBall()
basketball.playBasketBall()
golf.playGolf()
运行结果:
我是一个愉快的足球
我是一个胖胖的篮球
我是一个高贵的高尔夫
使用简单工厂模式,我们只需在工厂函数(类)内部维护一套类的列表,根据参数来创建相应的类的实例对象,提高了代码的整洁性和可维护性。
完。