zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    抽象工厂模式

    • 概念
      抽象工厂模式就是通过对类的工厂抽象使其业务用于对产品类簇的创建而不负责创建某一类产品的实例。
      因为javascript中abstract还是一个保留字,所以目前来说还不能像传统面向对象语言那样轻松地创建。抽象类是一种声明但不能使用的类,当你使用的时候会报错,但是我们可以在类的方法中手动的抛出错误来模拟抽象类。

    • 抽象工厂模式例子
      在javascript中,大多数的工厂都是用来创建对象的,但是抽象工厂模式一般不用来创建具体的对象,因为抽象类中定义的方法只是显性的定义了一些功能,但没有具体的实现,而一个对象是具有一套完整的功能的,所以抽象类不能用来创建一个真实 的对象。所以我们一般用他的父类来创建一些子类。如:

        //抽象工厂方法
        var vehicleFactory = function(subType, superType){
        	//判断抽象工厂中是否有该抽象类
        	if(typeof vehicleFactory[superType] === 'function'){
        		//缓存类
        		function F(){};
        		//继承父类属性和方法
        		F.prototype = new vehicleFactory[superType]();
        		//将子类constructor指向子类
        		subType.constructor = subType;
        		//子类的原型继承父类
        		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('抽象方法不能调用');
        	}
        }
        //公交车抽象类(略)
        //货车抽象类(略)
      
        //抽象和实现
        //宝马汽车子类
        var BMW = function(price, speed){
        	this.price = price;
        	this.speed = speed;
        }
        //抽象工厂实现对car抽象类的继承
        vehicleFactory(BMW, 'car');
        BMW.prototype.getPrice = function(){
        	return this.price;
        }
        BMW.prototype.getspeed = function(){
        	return this.speed;
        }
      
        //测试
        var car1 = new BMW(1000,100);
        console.log(car1.getPrice());//1000
      

    抽象工厂实际是一个实现子类继承父类的方法,在这个过程中我们需要通过传递子类以及要继承父类(抽象类)的名称,并且在抽象工厂的方法中又增加了一次对抽象类存在性的判断。通过抽象工厂,我们就能知道每个子类到底是哪一类别了,然后他们也具备了该类所具备的属性和方法。

  • 相关阅读:
    eclipse常用快捷键
    .net操作Excel快速
    treeview使用sort以后取消排序
    行转列,参数是文本类型
    easyui分页控件汉化扩展
    在子页面中获取父frameset中元素
    easyui-datagrid自定义分页控件样式
    字符串和图片转换
    VS2012设置随笔
    DevExpress之GridControl
  • 原文地址:https://www.cnblogs.com/yehui-mmd/p/6498190.html
Copyright © 2011-2022 走看看