js23---工厂模式1

简介:
<!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>
        //既可以当成java的类用,也可以当成c++函数用
        
        function CarShop(){};//卖车类,没有工厂模式
        CarShop.prototype = {
            constructor : CarShop ,
            sellCar:function(type){
                var car ; // 声明一个变量
                switch(type){
                    case 'Benz': car = new Benz(); break;
                    case 'Bmw' : car = new Bmw();  break;
                    case 'Audi': car = new Audi(); break;
                    default: 'not buy it ';
                }
                
                BH.Interface.ensureImplements(car ,CarInterface);//接口检测,当函数用BH.Interface.ensureImplements = function(object){},java的接口检测是虚拟机做的,js接口检测是我们自己写的。
                return car ;
            }
        };
        
        // 接口对象的实例,当类用BH.Interface = function(name,methods){}
        var CarInterface = new BH.Interface('CarInterface' ,['start','run']);
        
        // SuperClass  implements CarInterface 
        function BaseCar(){};
        BaseCar.prototype = {//父类方法都在原型对象中
            constructor:BaseCar , 
            start:function(){
                alert(this.constructor.name + ' ..start');//this是调用方法的子类,java多态(通过父类方法里面的this实现)
            },
            run:function(){
                alert(this.constructor.name + ' ..run');
            }
        };
        
        function Benz(){}; 
        BH.extend(Benz,BaseCar); //BH.extend=function(sub ,sup){},当函数用
        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();        
        </script>
    </head>
    <body>
    </body>
</html>
复制代码
复制代码
<!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>
            // 万事万物都是Object  : 卖车的商店 -> 卖车 -> 生产车 -> Factory
            
            function CarShop(){};// 商店
            CarShop.prototype = {
                constructor : CarShop ,
                sellCar:function(type){
                /*   面向对象   */
                    // 销售人员...
                    var car = CarFactory.createCar(type);//工厂
                    // 保险、相关的售后服务
                    return car ;
                }
            };
            
            //工厂,单体模式
            var CarFactory = {
                    createCar:function(type){
                            var car ; // 声明一个变量
                            switch(type){
                                case 'Benz': car = new Benz(); break;
                                case 'Bmw' : car = new Bmw();  break;
                                case 'Audi': car = new Audi(); break;
                                default: 'not buy it ';
                            }
                            //检验接口 交给工厂
                            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');
                }
            };
            
            
            // Class benz bmw audi (都是车)
            // 注意关键问题:子类先继承父类 子类在扩展子类自己特有的方法
            
            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();        
        </script>
    </head>
    <body>
    </body>
</html>
复制代码

 


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

相关文章
|
7月前
|
设计模式 JavaScript 数据安全/隐私保护
js设计模式之工厂模式
js设计模式之工厂模式
55 0
|
5月前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 工厂模式
js设计模式【详解】—— 工厂模式
22 0
|
7月前
|
设计模式 JavaScript 前端开发
JavaScript工厂模式:创建对象的简便方式!
JavaScript工厂模式:创建对象的简便方式!
|
设计模式 JavaScript 前端开发
|
前端开发 JavaScript 测试技术
web前端-JavaScript使用工厂模式创建对象
web前端-JavaScript使用工厂模式创建对象
52 0
|
前端开发 JavaScript 测试技术
web前端-JavaScript使用工厂模式创建对象
工厂模式 工厂模式是另外一种关注对象创建概念的创建模式。它的领域中同其它模式的不同之处在于它并没有明确要求我们使用一个构造器。取而代之,一个工厂能提供一个创建对象的公共接口,我们可以在其中指定我们希望被创建的工厂对象的类型。
web前端-JavaScript使用工厂模式创建对象
|
JavaScript 前端开发
#yyds干货盘点# 【js学习笔记四十】复杂工厂模式
#yyds干货盘点# 【js学习笔记四十】复杂工厂模式
220 0
#yyds干货盘点# 【js学习笔记四十】复杂工厂模式
|
JavaScript 前端开发 Java
|
Web App开发 JavaScript 前端开发
下一篇
无影云桌面