博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之创建型工厂模式
阅读量:4681 次
发布时间:2019-06-09

本文共 1814 字,大约阅读时间需要 6 分钟。

通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例。

创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
定义一个创建对象的接口,让其子类决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行,最终生成复杂对象。主要解决接口选择的问题。

您需要一辆汽车,可以直接从工厂里提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。

var PageFactory = function(type, content) {  if(this instanceof PageFactory) {    var s = new this[type](content);    return s;  } else {    // 防止使用者不知道这是一个类,忘了加new操作符创建,导致全局变量污染    return new PageFactory(type, content);  }};PageFactory.prototype = {  MyCss: function(content) {    // ...  },  MyJavaScript: function(content) {    // ...  },  MyPhp: function(content) {    // ...  }};

这样以后如果想添加其他类,只需要在PageFactory的原型里添加就可以了。对于创建很多类的对象,简单工厂模式就不适合了,通过工厂模式可以轻松创建多个类的实例对象,而且避免了使用者与对象类之间的耦合,用户不必关心创建该对象的具体类,只需调用工厂方法即可。

// 文本工厂class Text {    constructor(text) {        this.text = text    }    insert(where) {        const txt = document.createTextNode(this.text)        where.appendChild(txt)    }}// 链接工厂class Link {    constructor(url) {        this.url = url    }    insert(where) {        const link = document.createElement('a')        link.href = this.url        link.appendChild(document.createTextNode(this.url))        where.appendChild(link)    }}// 图片工厂class Image {    constructor(url) {        this.url = url    }    insert(where) {        const img = document.createElement('img')        img.src = this.url        where.appendChild(img)    }}// DOM工厂class DomFactory {  constructor(type) {    return new (this[type]())  }  // 各流水线  link() { return Link }  text() { return Text }  image() { return Image }}// 创建工厂const linkFactory = new DomFactory('link')const textFactory = new DomFactory('text')linkFactory.url = 'https://www.me'linkFactory.insert(document.body)textFactory.text = 'HI! I am camille.'textFactory.insert(document.body)

 

转载于:https://www.cnblogs.com/camille666/p/design_pattern_create_factory.html

你可能感兴趣的文章
linux动态库编译多重依赖,Linux动态库多重依赖
查看>>
linux网卡缓冲区设置,【Linux】tcp缓冲区大小的默认值、最大值
查看>>
opus编译linux,Linux 下源码编译FFMEG
查看>>
linux 运行real basic,REALbasic 快速入门.pdf
查看>>
linux启动tomcat不停的触发gc,tomcat启动时就频繁gc和full gc
查看>>
linux uart串口驱动,X-017-KERNEL-串口驱动开发之uart driver框架
查看>>
关于sqoop导入数据的时候添加--split-by配置项对sqoop的导入速度的影响。
查看>>
nginx配置
查看>>
2014-11-9------- 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。...
查看>>
python 魔法方法补充(__setattr__,__getattr__,__getattribute__)
查看>>
NOIP 2010 关押罪犯
查看>>
CentOS7.5删除旧的内核
查看>>
Java常用的非受检异常
查看>>
HDOJ-2054
查看>>
centos7安装eclipse
查看>>
Web:AJAX的详解
查看>>
S2JDBC テーブルを利用した独自仕様のid採番メソッド
查看>>
P3698 [CQOI2017]小Q的棋盘
查看>>
动态规划入门 洛谷P2409 Y的积木
查看>>
【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title
查看>>