js24---工厂模式2

简介:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
        <!-- 引入的核心js公共文件 -->
        <script type=text/javascript charset=utf-8 src=../commons/../commons/CommonUtil.js></script>
        <script type=text/javascript charset=utf-8>
            
            //分发到不同的4S店(类似于java的抽象类)
            function CarShop(){};
            CarShop.prototype = {
                constructor : CarShop ,
                sellCar:function(type){
                    // 销售人员...
                    //var car = CarFactory.createCar(type);
                    // 保险、相关的售后服务
                    //return car ;
                    this.abstractSellCar(type);
                } ,
                abstractSellCar: function(){
                    throw new Error('this method is abstract...');
                }
            };
            
            // Benz 4s 店 
            function BenzCarShop(){};
            BH.extend(BenzCarShop,CarShop);
            BenzCarShop.prototype = {
                constructor:BenzCarShop ,
                sellCar:function(type){
                    var car ; 
                    var types = ['Benz'];    //输入参数校验
                    for(t in types){
                        // 如果我的商店里有你想要汽车型号
                        if(types[t] === type){
                            car = CarFactory.createCar(type);
                        } else { 
                            alert('没有你要的型号!');
                        }
                    }
                    return car ;
                }
            };
            
            // 宝马  4s 店 
            function BmwCarShop(){};
            BH.extend(BmwCarShop,CarShop);
            BmwCarShop.prototype = {
                constructor:BmwCarShop ,
                sellCar:function(type){
                    var car ;
                    var types = ['Bmw'];    //输入参数校验
                    for(t in types){
                        // 如果我的商店里有你想要汽车型号
                        if(types[t] === type){
                            car = CarFactory.createCar(type);
                        } else { 
                            alert('没有你要的型号!');
                        }
                    }
                    return car ;
                }                    
            };        
            
                
            
            //生产车的工厂 目的就是为了生产车
            //单体模式 动态工厂模式
            var CarFactory = {
                createCar:function(type){
                    // var car = new Benz();,不需要做switch判断了
                    var car = eval('new '+type+'()');
                    //检验接口实现
                    BH.Interface.ensureImplements(car ,CarInterface);
                    return car ;                        
                }
            };
            
            
            
            
            
            // 接口对象的实例
            var CarInterface = new BH.Interface('CarInterface' ,['start','run']);
            
            // SuperClass  implements CarInterface 
            function BaseCar(){};
            BaseCar.prototype = {
                constructor:BaseCar , 
                start:function(){
                    alert(this.constructor.name + ' ..start');
                },
                run:function(){
                    alert(this.constructor.name + ' ..run');
                }
            };
            
            function Benz(){}; 
            BH.extend(Benz,BaseCar); 
            Benz.prototype.driveBenz = function(){alert('Benz..drive')}; 
            //Benz.prototype.run = function(){alert('Benz..run')};
            
            function Bmw(){};
            BH.extend(Bmw,BaseCar);
            Bmw.prototype.driveBmw = function(){alert('Bmw..drive')};
            //Bmw.prototype.run = function(){alert('Bmw..run')};    
            
            function Audi(){};
            BH.extend(Audi,BaseCar);
            Audi.prototype.driveAudi = function(){alert('Audi..drive')};
            //Audi.prototype.run = function(){alert('Audi..run')};    
            
            
            var shop = new CarShop();        
            var car = shop.sellCar('Benz');
            car.start();
            car.run();
            car.driveBenz();

            var car2 = shop.sellCar('Bmw');
            car2.start();
            car2.run();    
            car2.driveBmw();    
            
            
            
            
            
            
            var shop1 = new BenzCarShop();
            var car1 = shop1.sellCar('Benz');
            car1.run();
            
            var shop2 = new BmwCarShop();
            var car2 = shop2.sellCar('Bmw');
            car2.run();
            
            
        </script>
    </head>
    <body>
    </body>
</html>
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/6882877.html,如需转载请自行联系原作者

相关文章
|
21天前
|
JavaScript 前端开发
JS实现继承的6种方式
JS实现继承的6种方式
|
7月前
|
JavaScript 安全 前端开发
js创建对象的七种方式
js创建对象的七种方式
|
前端开发 JavaScript
|
JavaScript 测试技术
我的js单例模式
function Single(s){ if (Single.instance!=undefined) {     return Single.instance;   };   /**测试代码 start*/   var a=new Date().
773 0
|
JavaScript
js创建对象都有几种模式,具体都是什么?
1、通过Object构造函数或者对象字面创建单个对象 这些方式有明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码,为了解决这个问题,出现了工厂模式。
976 0
|
JavaScript
js创建对象的九种方法
一、对象字面量 var person={ name:"Tom", age:"23", gender:"boy" } 特点:一次只能创建一个对象,代码不能复用,会造成代码冗余 二、Object()构造函数 var person=new Object(); person.
1081 0
第201天:js---实现继承的5种方式
一、构造函数方式 1 //构造函数 2 function People(){ 3 this.race = '汉族'; 4 } 5 People.prototype={ 6 eat:function(){ 7 console.
1041 0
|
JavaScript 数据格式 JSON
第184天:js创建对象的几种方式总结
面向对象编程(OOP)的特点:   抽象:抓住核心问题   封装:只能通过对象来访问方法   继承:从已有的对象下继承出新的对象   多态:多对象的不同形态 一、创建对象的几种方式 javascript 创建对象简单的来说,无非就是使用内置对象或各种自定义对象,当然还可以使用JSON,但写法有很多,也能混合使用。
1048 0
|
Web App开发 JavaScript 前端开发