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

    1 简单工厂模式

    var CarFactory = function(){};

    CarFactory.prototype= {

        createCar: function(type){

            var car= null;

            switch(type){

                case 'ford': car= new Ford();break;

                case 'jetta': car= new Jetta();break;

                default: car= new Lancer();

           }

        }

    }

    var CarShop = new function(){}

    CarShop.prototype = {

        sellCar: function(type){

           var car = new CarFactory().createCar(type);

           car.made();

           car.wash();

           return car;

        }

    }

    2 抽象工厂模式

    汽车制造厂不可能制造所有的汽车,汽车店也不可能卖所有的汽车。但是卖车的流程(本人不清楚卖车流程,sellCar方法只是假设)是一样的。怎么办,上面的简单工厂模式显然不适合。

    由于制造汽车各不相同,createCar变成一个抽象方法。

    var CarShop = function(){}

    CarShop.prototype= {

        createCar: function(type){

             throw new Error("Unsupported operation on an abstract class.");       

        },

        sellCar: function(type){

            var car = this.createCar(type);

            car.made();

            car.wash();

            return car;

        }

    }

    //丰田汽车店,只卖丰田汽车

    var ToyotaShop = function (){};

    //继承CarShop

    ToyotaShop.prototype = new CarShop();

    ToyotaShop.prototype.createCar = function(type){

        var car = null;

        switch(type){

            case 'vios': car = new Vios();break;

            case 'yaris': car = new Yaris();break;

            case 'corolla': car = new Corolla();break;

            default: car = new Crown();

        }

        return car;

    }

    //比亚迪汽车点

    ...

    不同的汽车店继承CarShop,然后实现自己的createCar方法。

    3 工厂模式的使用场景

        3.1 有相同接口,但是不同实现的类

        3.2 把很多小类,聚合到一个大类,减少代码重复。高内聚低耦合。

        3.3 在运行时,可以动态选择用什么类

        3.4 在必须的时候才使用工厂模式,不要滥用

  • 相关阅读:
    jquery easyui-datagrid手动增加删除重置行
    jsp中一行多条数据情况
    JQuery操作下拉框
    解决juqery easyui combobox只能选择问题
    oracle中WMSYS.WM_CONCAT函数的版本差异
    oracle wm_concat(column)函数的使用
    Javascript九大排序算法详解
    C#和VB新版本的最新特性列表
    Oracle中如何区别用户和模式
    远程控制数据库实用SQL重启功能
  • 原文地址:https://www.cnblogs.com/oceanxing/p/2890709.html
Copyright © 2011-2022 走看看