《JavaScript设计模式》笔记 之 抽象工厂模式
抽象工厂模式
抽象工厂模式:通过对类的工厂抽象使其业务用域对产品类簇的创建,而不是负责创建某一类产品的实例。
抽象类
JavaScript 中 abstract 还是保留字,虽然不像传统面向对象创建,之前Dart就有此类方法,(语言相通性)。
var Car = function(){};
Car.prototype = {getPrice:function(){return new Error("抽象方法不可以调用")},getSpeed:function(){return new Error("抽象方法不能调用")}
}
创建时没有任何属性,而原型prototype上的方法也不能直接使用,会报错。但是在一些大型的应用中,总有一些子类去继承另一些父类,这些父类经常会定义一些必要的方法,却没有具体实现,如Car中的getPrice和getSpeed,那么一旦创建了一个对象,该对象总是具备一些必备的方法,但是这些必要的方法从父类继承过来而没有具体去重写实现,就会报个友好的错误,return new Error(),需要重写父类方法。
抽象工厂函数
抽象函数定义的方法只是显性地定义一些方法和功能,但是没有具体的实现,而一个对象是要有一套完整的功能,使用用抽象类创建的对象当然也是抽象的。
// 抽象工厂方法
var VehicleFactory = function(subType,superType){//判断抽象工厂中是否含有抽象类if(typeof VehicleFactory[superType]==='function'){//缓存类function F(){};F.prototype = new VehicleFactory[superType]();//将子类的constructor指向子类subType.constructor = subType;//子类原型继承父类 new 的作用过度类不仅继承父类的原型方法,还要继承父类的原型方法subType.prototype = new F()}else{throw new Error('未创建该抽象类')}
}//小汽车的抽象类
VehicleFactory.Car = function(){this.type = 'car'
}
VehicleFactory.Car.prototype = {getPrice:function(){return new Error('抽象方法不能调用')},getSpeed:function(){return new Error('抽象方法不能调用')}
};//公交车抽象类
VehicleFactory.Bus = function(){this,type = 'bus'
}
VehicleFactory.Bus.prototype = {getPrice:function(){return new Error('抽象方法不能调用')},getSpeed:function(){return new Error('抽象方法不能调用')}
};//货车抽象类
VehicleFactory.Truck = function(){this,type = 'truck'
}
VehicleFactory.Truck.prototype = {getPrice:function(){return new Error('抽象方法不能调用')},getSpeed:function(){return new Error('抽象方法不能调用')}
};// -------------------------使用----------------------------// 宝马汽车子类
var BMW = function(price,speed){this.price = price;this.speed = speed;
}
VehicleFactory(BMW,'Car')
BMW.prototype.getPrice = function(){return this.price
}
BMW.prototype.getSpeed = function(){return this.speed
}// 宇通公交子类
var YUTONG = function(price,speed){this.price = price;this.speed = speed;
}
VehicleFactory(YUTONG,'Bus')
YUTONG.prototype.getPrice = function(){return this.price
}
YUTONG.prototype.getSpeed = function(){return this.speed
}// 实例化
var bmw = new BMW(1000000,10000);
console.log(bmw.getPrice()) //1000000
console.log(bmw.type) //car
通过抽象工厂就能知道每个子类到底是哪一类类别的,然后他们具备了该类的所必备的属性和方法。
《JavaScript设计模式》笔记 之 抽象工厂模式相关推荐
- 【设计模式笔记】抽象工厂模式
围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂. 提供了一种创建对象的最佳方式. 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显示指定它们的类. 每个生成的工厂都能按照工厂 ...
- 设计模式笔记之三抽象工厂模式
抽象工厂模式 为什么引入抽象工厂模式? 一个接口代表一系列操作,当我们需要的对象需要多个接口,而这些接口又是不相干的,同时对于类的创建我们不需要知道具体的实现细节,只需要知道某个特征就可以,虽然工厂方 ...
- JavaScript 23 种设计模式之 4 抽象工厂模式
JavaScript 23 种设计模式之 4 抽象工厂模式 概念与特点 结构与实现 应用场景 应用实例 总结 概念与特点 概念: 提供一组相关或相互依赖对象的接口.抽象工厂模式是工厂方法模式的升级版, ...
- 设计模式C#描述——抽象工厂模式
设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...
- 设计模式二、抽象工厂模式
设计模式part2 1. 抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题, ...
- 设计模式普及之抽象工厂模式
本文是读<Android源码设计模式解析与实战>后笔记 抽象工厂的定义 为创建一组相关或者是相互依赖的对象提供一个借口,而不需要指定它们的具体类. 抽象工厂的使用场景 一个对象族有相同的约 ...
- 【设计模式】之抽象工厂模式
创造性设计模式 创造型模式主要是为了实例化类所用.进一步又分为类创建.对象创建模式. 类创建模式 类创建模式主要基于继承方式进行实例化 对象创建模式 对象创建模式主要基于委托机制进行实例化 Abstr ...
- java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式
抽象工厂模式是在工厂方法模式之上的有一次升级,以便能够处理更加复杂的对象创建场景.因此也是所有形态的工厂模式中最为抽象和最具一般性的一种形态. 有朋友可能会想了,工厂方法模式已经是对简单工厂模式的具体 ...
- java设计模式六(抽象工厂模式)
java设计模式-抽象工厂模式 一.概述 抽象工厂模式是在工厂模式的基础上,加上了一个管理工厂的超级工厂.也就是说,工厂的作用是管理各种有相似功能的类,而超级工厂的作用是管理这些工厂. 二.模式示例: ...
最新文章
- iOS控件之UILabel
- 【Paper】2018_多无人机协同编队控制算法研究_林倩玉
- 算法—详细讲解单向链表的实现(python)
- CodeForces 839D - Winter is here | Codeforces Round #428 (Div. 2)
- hdu1196 Lowest Bit
- jsp页面页面post传值_几种JSP页面传值方式
- 开发者福音!面向Web场景的云开发服务正式开放!
- django mysql filter_Django filter中用contains 在mysql中的问题
- 如何在不重新加载页面的情况下修改URL?
- python tkinter grid布局
- 基于字典的超分辨率实现的各种方法
- 浅复制和深复制的区别?//浅拷贝和深拷贝
- 阿里巴巴与山东省人民政府签署战略合作协议
- 【转载】关于文献阅读和科研选题
- Idea多次启动同一个服务
- KB927917解决方法
- 全面发展还是术业专攻?这就是答案
- 跨境网络赌博“易倍”被端 赌资21亿元均进入第三方支付后“漂白”
- 【Adobe 】Adobe Photoshop2022特别版推荐
- 林仕鼎:架构设计的一些思考