• 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>
  • 相关阅读:
    100篇论文
    Tengine vs openresty
    Dottrace跟踪代码执行时间
    Linux Server
    Linux+Apache+Mysql+Php
    linux+nginx+mysql+php
    tshark命令行的使用(转)
    tcpdump VS tshark用法(转)
    Lua语言在Wireshark中使用(转)
    doc-remote-debugging.html
  • 原文地址:https://www.cnblogs.com/yaowen/p/6882874.html
Copyright © 2020-2023  润新知