1.简单工厂模式
工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一
个类。
先看一个简单的java例子
//自行车接口
public interface Bicycle{
public void getName();
public void assemble();
public void wash();
}
//自行车产品A
public class BicycleA{
public void getName(){
System.out.println("--------I am is Bicycle A--------")
}
public void assemble(){
}
public void wash(){
}
}
//自行车产品B
public class BicycleB{
public void getName(){
System.out.println("---------I am is Bicycle B----------")
}
public void assemble(){
}
public void wash(){
}
}
//工厂类
public class BicycleCreator{
public Bicycle createBicycle(type){
if("A".equals(type)){
return new BicycleA();
}else if("B".equals(type)){
return new BicycleB();
}else{
return null;
}
}
public static void main(args[]){
BicycleCreator creator =new BicycleCreator();
creator.createBicycle("A").getName();
creator.createBicycle("B").getName();
}
}
4. 小结工厂模式的适用范围
• 在编码时不能预见需要创建哪一种类的实例。
• 一个类使用它的子类来创建对象。
• 开发人员不希望创建了哪个类的实例以及如何创建实例的信息暴露给外部程序。
下面使用javascript来模拟实现下一个工厂模式
// 定义自行车产品A
var BicycleA=function(){};
BicycleA.prototype={
getName:function(){
alert("I am A bicycle");
},
assemble:function(){},
wash:function(){}
}
//定义自行车产品B
var BicycleB=function(){};
BicycleA.prototype={
getName:function(){
alert("I am B bicycle");
},
assemble:function(){},
wash:function(){}
}
//定义工厂
var BicycleFatory={
createBicycle:function(model){
var bicycle;
switch(mode){
case 'A':
bicycle=new BicycleA();
break;
case 'B':
bicycle=new BicycleB();
break;
}
return bicycle;
}
}
//调用方法 定义一个自行车专卖店
var BicycleShop=function(){};
BicycleShop.prototype={
sellBicycle:function(mode){
var bicycle=BicycleFactory.createBicycle(mode);
bicycle.assemble();
bicycle.wash();
rerturn bicycle;
}
}
接口在工厂模式中起着重要的作用,但javascript中没有严格意义上的接口概念,当然可以写个封装类来强行检查类是否实现了必要的方法,在此不进行展示。如果在定义对象时没有确保实现了必要的产品方法,则工厂模式带来的好处就所剩无几了。
分享到:
相关推荐
帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个...
6.5.2 模式--函数工厂及其实例 6.6 总结 第7章 对象 7.1 什么是对象 7.2 对象的属性和方法 7.2.1 对象的内置属性 7.2.2 为对象添加和删除属性 7.2.3 反射机制--枚举对象属性 7.3 ...
它是作为ES6 / SystemJS加载程序插件实现的,该插件采用声明性JSON模式匹配描述,并将其转换为表单export default function view(state)的非常简单且“纯”的视图函数,以用于 ,React,或你有什么。 在最简单的一...
本系统使用三层架构,应用逻辑采用数据库Dao+对象工厂模式;系统采用UTF-8编码,支持多国语言,网站后台采用WEB标准排版,支持多浏览器。文章管理采用可视化的内容编辑,操作容易、上手简单,是一套不需要懂编程...
DbToCode 是一款为 C# 数据库程序员设计的自动代码生成器,DbToCode 生成的代码基于基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。采用 Model +...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
这是一个典型的B2C网上商城,使用经典的复杂三层架构(工厂模式)进行开发。涉及图书管理、搜索、订单管理、导航管理等核心模块。在讲解ASP.Net基础后安排这样一个B2C网上商城系统,让学员在实际项目中将学到的知识...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax...
Codematic 是一款为 C# 数据库程序员设计的自动代码生成器,Codematic 生成的代码基于基于面向对象的思想和三层架构设计,结合了Petshop中经典的思想和设计模式,融入了工厂模式,反射机制等等一些思想。采用 ...
第 1 章 JavaScript 是什么...............................................1 3 1.1 历史简述..............................................1 1.2 JavaScript 实现................................................
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...
游戏主界面采用了MVC的模式来设计,CCScene 作为 Controller ,其它的Layer 作为View。其它页面都比较简单,单Layer 实现。逻辑也都放在Layer里了。另外,专门定义了一个 HideLayer ,目的是实现弹出对话框的效果,...
技术点七:UI快速开发库,针对WEBUI进行标准封装,页面统一采用UI标签实现功能:数据datagrid,表单校验,Popup,Tab等,实现JSP页面零JS,开发维护非常高效 技术点八:在线流程定义,采用开源Activiti流程引擎,...