JavaScript 设计模式之工厂模式

工厂模式的定义

工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。

工厂模式的使用场景

以下几种情景下工厂模式特别有用:

(1)对象的构建十分复杂

(2)需要依赖具体环境创建不同实例

(3)处理大量具有相同属性的小对象

什么时候不该用工厂模式

不滥用运用工厂模式,有时候仅仅只是给代码增加了不必要的复杂度,同时使得测试难以运行下去。

举个简单的例子:页面上需要根据下拉框选择不同的选项,下面的页面展示不同的内容

一、页面展示内容:

<body>
    <div>
        <select id="sel" onchange="selChange()">
            <option selected="selected" value="0">文本</option>
            <option value="1">表格1</option>
            <option value="2">链接</option>
            <option value="3">表格2</option>
        </select>
    </div>
    <div id="divContent"></div>
</body>

二、工厂模式js:

<script type="text/javascript">
        //var page = page || {};
        //page.dom = page.dom || {};
        var page = {};
        page.dom = {};

        //子函数1:处理文本
        page.dom.Text = function () {
            this.insert = function (where,url) {
                var txt = url;
                where.innerHTML = txt;
            };
        };

        //子函数2:处理链接
        page.dom.Link = function () {
            this.insert = function (where, url) {
                var link = "<a href=‘" + url + "‘>" + url + "</a>";
                where.innerHTML = link;
            };
        };

        //子函数3:表格1
        page.dom.Table1 = function () {
            this.insert = function (where) {
                var table = "<table>";
                table += "<tr><td>编号</td><td>姓名</td></tr>";
                table += "<tr><td>1</td><td>ck</td></tr>";
                table += "<tr><td>2</td><td>lily</td></tr>";
                table += "<tr><td>3</td><td>tom</td></tr>";
                table += "</table>";

                where.innerHTML = table;
            };
        };

        //子函数4:表格2
        page.dom.Table2 = function () {
            this.insert = function (where) {
                var table = "<table>";
                table += "<tr><td>编号</td><td>姓名</td><td>年龄</td></tr>";
                table += "<tr><td>1</td><td>ck</td><td>25</td></tr>";
                table += "<tr><td>2</td><td>lily</td><td>26</td></tr>";
                table += "<tr><td>3</td><td>tom</td><td>28</td></tr>";
                table += "</table>";

                where.innerHTML = table;
            };
        };

        page.dom.facory = function (type) {
            return new page.dom[type];
        }
    </script>

三、调用:

<script type="text/javascript">

        function selChange() {
            var value = document.getElementById("sel").value;
            var divContent = document.getElementById("divContent");
            if (value == 0) {
                var o = page.dom.facory("Text");
                o.url = "http://www.baidu.com";
                o.insert(divContent, o.url);
            }
            else if (value == 1) {
                var o = page.dom.facory("Table1");
                o.insert(divContent);
            }
            else if (value == 2) {
                var o = page.dom.facory("Link");
                o.url = "http://www.baidu.com";
                o.insert(divContent, o.url);
            }
            else if (value == 3) {
                var o = page.dom.facory("Table2");
                o.insert(divContent);
            }
        }

    </script>

根据选择不同的选项进行不同内容的展示,只需要把类型参数传进去即可。

另外网站的不同皮肤也可以使用工厂模式进行切换样式,个人觉得。

时间: 2024-10-09 13:45:26

JavaScript 设计模式之工厂模式的相关文章

javaScript设计模式---(工厂模式学习)

工厂模式(Factory)提供一个公用的接口来创建对象. 如有一个UI库,我们要创建某个UI组件的类型,不需要直接使用new 运算符或者通过另一个创建型构造函数创建这个组件,而是要求Factory对象创建一个新的组件.我们通知Factory需要什么样的对象(如按钮.面板),它会进行实例化,然后将它返回给我们. function Car (name, color) { this.name = name; this.color = color; } function Trunk (name, col

javascript设计模式-抽象工厂模式

抽象工厂模式,是创建型模式的一种,其实是一个实现子类继承父类的方法,在这个方法中,通过传递子类以及要继承父类的名称,并且在抽象工厂方法中增加了对抽象类存在性的判断,如果存在,则将子类继承父类的方法.然后子类通过寄生式继承. 抽象工厂是用来创建子类的,本身可以视为一个类簇,它制定了子类的结构,让子类继承抽象工厂的方法及属性,因此抽象工厂模式可以创建多类对象. 例:定义抽象工厂方法: var VehicleFactory = function (subFun, subClass) { if (typ

JavaScript设计模式之工厂模式

一.工厂模式概念 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类.该模式使一个类的实例化延迟到了子类.而子类可以重写接口方法以便创建的时候指定自己的对象类型(抽象工厂). 这个模式十分有用,尤其是创建对象的流程赋值的时候,比如依赖于很多设置文件等.并且,你会经常在程序里看到工厂方法,用于让子类定义需要创建的对象类型. 二.工厂模式的作用和注意事项 模式作用: 1.对象构建十分复杂--我们穿鞋很简单,但是制作鞋子的过程十分复杂 2.需要依赖具体的环境创建不同的实例--工厂可以

JavaScript设计模式-9.工厂模式

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript高级语法9-工厂模式</title> 6 </head> 7 <body> 8 <script> 9 /*1.简单工厂 :通过第三方的类完成松耦合的任务 ->工厂. 10 * 2.复杂工厂:通过把实例化的任务交个子类

JS 设计模式(工厂模式环境搭建)

<!--引入的核心JS文件--> <script type="text/javascript" src="CommonUtil.js"></script> <script type=text/javascript charset=utf-8> <!--JS设计模式(工厂模式)--> //搭建一个工厂环境 //卖车店 function CarShop(){}; CarShop.prototype={ cons

HeadFirst 设计模式 04 工厂模式

除了 new 操作符之外, 还有更多创造对象的方法. 工厂处理创建对象的细节. 这么做的目的是为了抽象, 例如把创建比萨的代码包装进一个类, 当以后实现改变时, 只需修改这个类即可. 利用静态方法定义一个简单的工厂, 这是很常见的技巧, 被称作静态工厂. 所有工厂模式斗都用来封装对象的创建, javascript 也是一样. 工厂方法模式通过让子类决定该创建的对象是什么, 来达到将对象创建的过程封装的目的. 工厂模式定义了一个创建对象的接口, 但由子类决定要实例化的类是哪一个. 工厂方法让类把实

php设计模式——抽象工厂模式(Abstract Factory)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 <?php 2 /* 3 * php设计模式——抽象工厂模式(Abstract Factory) 4 */ 5 6 7 /* 8 * I

设计模式-抽象工厂模式(C#)

设计模式--抽象工厂模式(JAVA) 在抽象工厂模式中,一个具体工厂可以生产一组相关的具体产品,这样的一组产品成为产品族,产品族中的每一个产品都属于某一个产品继承等等级结构.当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构.属于不同类型的具体产品时就可以使用抽象工厂模式. 抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式需要面对多个产品等级结构,一个工厂等级结构可以负责多个不同产品等级结构中的产品对象的创建,当一个工

设计模式 5 —— 工厂模式

设计模式目录: 设计模式 1 ——观察者模式 设计模式 2 —— 装饰者模式 设计模式 3 —— 迭代器和组合模式(迭代器) 设计模式 4 —— 迭代器和组合模式(组合) 设计模式 5 —— 工厂模式 设计模式 5 -- 工厂模式,布布扣,bubuko.com