设计模式知识连载(14)---工厂方法模式:
来源:互联网 发布:java开源的cms 编辑:程序博客网 时间:2024/06/06 02:42
<body><h3>设计模式知识连载(14)---工厂方法模式:</h3><p> 工厂方法模式:创建多类(不同种类的)对象</p><div id = 'container' ></div><script type="text/javascript"> /** * 案例,方式一:常规写法 */ // // 创建Java学科类 // var Java = function (content) { // // 将内容保存在content里面以备日后使用 // this.content = content ; // // 创建对象时,通过闭包,直接执行,将内容按需求的样式插入到页面内 // (function(content){ // var _div = document.createElement('div') ; // _div.innerHTML = content ; // _div.style.color = 'green' ; // document.getElementById('container').appendChild(_div) ; // })(content) ; // } ; // // 创建PHP学科类 // var Php = function(content) { // this.content = content ; // (function(content) { // var _div = document.createElement('div') ; // _div.innerHTML = content ; // _div.style.color = 'yellow' ; // _div.style.background = 'red' ; // document.getElementById('container').appendChild(_div) ; // })(content) ; // } ; // // 创建JavaScript学科类 // var JavaScript = function(content) { // this.content = content ; // var _div = document.createElement('div'); // _div.innerHTML = content ; // _div.style.color = 'blue' ; // document.getElementById('container').appendChild(_div) ; // } // var java = new Java('这是Java的广告') ; // var php = new Php('这是Php的广告') ; // var javascript = new JavaScript('这是javascript的广告') ; /** * 案例,方式二:简单工厂模式 */ // // 创建Java学科类 // var Java = function (content) { // // 将内容保存在content里面以备日后使用 // this.content = content ; // // 创建对象时,通过闭包,直接执行,将内容按需求的样式插入到页面内 // (function(content){ // var _div = document.createElement('div') ; // _div.innerHTML = content ; // _div.style.color = 'green' ; // document.getElementById('container').appendChild(_div) ; // })(content) ; // } ; // // 创建PHP学科类 // var Php = function(content) { // this.content = content ; // (function() { // var _div = document.createElement('div') ; // _div.innerHTML = content ; // _div.style.color = 'yellow' ; // _div.style.background = 'red' ; // document.getElementById('container').appendChild(_div) ; // })(content) ; // } ; // // 创建JavaScript学科类 // var JavaScript = function(content) { // this.content = content ; // (function() { // var _div = document.createElement('div'); // _div.innerHTML = content ; // _div.style.color = 'blue' ; // document.getElementById('container').appendChild(_div) ; // })(content) ; // } ; // function JobFactory(type ,content) { // switch (type) { // case 'java' : // return new Java(content) ; // case 'php' : // return new Php(content) ; // case 'javascript' : // return new JavaScript(content) ; // } ; // } ; // JobFactory('java', '这是Java的广告') ; // JobFactory('php', '这是Php的广告') ; // JobFactory('javascript', '这是JavaScript的广告') ; /** * 案例,方式三:安全的工厂方法 */ var Factory = function(type, content) { // 安全模式类 if(this instanceof Factory ){ var s = new this[type](content) ; return s ; }else{ return new Factory(type, content) ; } ; } ; Factory.prototype = { Java : function(content) { this.content = content ; (function() { var _div = document.createElement('div') ; _div.innerHTML = content ; _div.style.color = 'green' ; document.getElementById('container').appendChild(_div) ; })(content) ; }, Php : function(content) { this.content = content ; (function() { var _div = document.createElement('div') ; _div.innerHTML = content ; _div.style.color = 'yellow' ; _div.style.background = 'red' ; document.getElementById('container').appendChild(_div) ; })(content) ; }, JavaScript : function(content) { this.content = content ; (function() { var _div = document.createElement('div') ; _div.innerHTML = content ; _div.style.color = 'blue' ; document.getElementById('container').appendChild(_div) ; })(content) ; }, UI : function(content) { this.content = content ; (function() { var _div = document.createElement('div') ; _div.innerHTML = content ; _div.style.border = '1px solid red' ; document.getElementById('container').appendChild(_div) ; })(content) ; } } ; var data = [ {type : 'Java', content : '这是Java的广告'}, {type : 'Php', content : '这是Php的广告'}, {type : 'JavaScript', content : '这是JavaScript的广告'}, {type : 'UI', content : '这是UI的广告'}, ] ; for(var i = 0; i < data.length; i++) { console.log(data[i].type+'---'+data[i].content) ; Factory(data[i].type, data[i].content) ; } /** * 安全模式类小Demo */ // 正常情况 var Demo = function() {} ; Demo.prototype = { show : function() { console.log('成功获取') ; } } ; var demo1 = new Demo() ; var demo2 = Demo() ; demo1.show() ; // 成功获取 // demo2.show() ; // Uncaught TypeError: Cannot read property 'show' of undefined // 使用安全模式类 var DemoSafety = function() { if(!(this instanceof(DemoSafety))) { return new DemoSafety() ; } } ; DemoSafety.prototype = { show : function() { console.log('获取成功~~~') ; } } ; var demosafety1 = new DemoSafety() ; var demosafety2 = DemoSafety() ; demosafety1.show() ; // 获取成功~~~ demosafety2.show() ; // 获取成功~~~</script></body>
阅读全文
0 0
- 设计模式知识连载(14)---工厂方法模式:
- 设计模式知识连载(13)---简单工厂模式:
- 设计模式知识连载(15)---抽象工厂模式:
- 设计模式知识连载(26)---模板方法模式:
- java设计模式连载(1)---工厂方法模式
- Java设计模式圣经连载(02)-工厂方法(Factory Method)模式
- Java设计模式圣经连载(02)-工厂方法(Factory Method)模式
- 设计模式知识连载(16)---建造者模式:
- 设计模式知识连载(17)---原型模式:
- 设计模式知识连载(18)---单例模式:
- 设计模式知识连载(19)---外观模式:
- 设计模式知识连载(20)---适配器模式:
- 设计模式知识连载(21)---代理模式:
- 设计模式知识连载(22)---装饰者模式:
- 设计模式知识连载(23)---桥接模式:
- 设计模式知识连载(24)---组合模式:
- 设计模式知识连载(25)---享元模式:
- 设计模式知识连载(27)---观察者模式:
- 记录一下前端踩的坑
- 线段树--动态区间查询
- C#实现一个最简单的HTTP服务器
- yolo2中region_layer理解未完成版
- 基础练习 龟兔赛跑预测
- 设计模式知识连载(14)---工厂方法模式:
- Spring 事物机制总结
- 总结 2017-12-12
- tab切换原生js新手
- STM32单片机,禁止系统启动时的变量初始化。
- JCrontab简单入门实例
- linux公钥私钥互联
- C语言基础
- 欢迎使用CSDN-markdown编辑器