写在前面的话:
一个类或对象中往往会包含别的对象。在创建这种成员对象时,你可能习惯使用常规的方法,即用new关键字和构造函数创建实例。但这样问题在于会导致两个类之间产生依赖性。消除这两个类之间的依赖模式,可以使用一种方法来决定究竟要实现哪个具体类。
用简单工厂模式实现计算器
UML类图:
代码中使用的工具类
var Util = { /* subClass继承superClass */ extend: function(subClass, superClass) { var F = function() {}; F.prototype = superClass.prototype; subClass.prototype = new F(); //为子类设置原型对象 subClass.prototype.constructor = subClass; subClass.superclass = superClass.prototype; if(superClass.prototype.constructor === Object.prototype.constructor) { superClass.prototype.constructor = superClass; } } };
简单工厂使用一个类(通常是一个单体)来生成实例。
//用单例实现获取运算符的实例 var OperationFactory = { //根据传递的参数创建相应的运算符对象并返回 createOperation: function(operate) { var oper = null; switch(operate) { case '+': oper = new OperationAdd(); break; //... } return oper; } };
业务的封装
Operation运算类
//超类:运算类 function Operation() { //私有属性 参与运算的数字 var number1, number2; //公有方法 属性的取值器和赋值器 this.getNumber1 = function() { return number1; }; this.setNumber1 = function(number) { number1 = number; }; this.getNumber2 = function() { return number2; }; this.setNumber2 = function(number) { number2 = number; }; } //公有方法 Operation.prototype = { //虚函数 需要子类实现 getResult: function() { var result = 0.0; return result; } };
各种运算符类(+ - * /)继承运算类
function OperationAdd() { //+ OperationAdd.superclass.constructor.call(this); //实现继承第一步 } Util.extend(OperationAdd, Operation); //实现继承第二步 /* * 重写超类的方法 * @override */ OperationAdd.prototype.getResult = function() { //扩展子类 var result = this.getNumber1() + this.getNumber2(); return result; }; function OperationSub() { //'-' OperationSub.superclass.constructor.call(this); } Util.extend(OperationSub, Operation); //重写超类的方法 OperationSub.prototype.getResult = function() { //... } function OperationMul() { //'*' } function OperationDiv() { //'/' }
程序的总体结构:
var calculator = (function(Util){ //超类:运算类 function Operation() { //... } //公有方法 Operation.prototype = { //虚函数 需要子类实现 getResult: function() {} }; //----------------------------------------------------------------- //各种运算符类(+ - * /)继承运算类 function OperationAdd() { //+ OperationAdd.superclass.constructor.call(this); //实现继承第一步 } Util.extend(OperationAdd, Operation); //实现继承第二步 /* * 重写超类的方法 * @override */ OperationAdd.prototype.getResult = function() { //扩展子类 var result = this.getNumber1() + this.getNumber2(); return result; }; function OperationSub() { //'-' //... } function OperationMul() { //'*' //... } function OperationDiv() { //'/' //... } //------------------------------------------------------ //用单例实现获取运算符的实例 var OperationFactory = { //... }; return { OperationFactory: OperationFactory }; })(Util);
对加法类简单的测试:
(function() { var oper = null; //根据传递的参数获取运算符对象 oper = calculator.OperationFactory.createOperation('+'); oper.setNumber1(1); oper.setNumber2(2); console.log(oper.getResult()); })();
编程是一门技术,更是一门艺术,应时常考虑如何让代码更加简练,更加容易维护,容易扩展和复用,只有这样才可以真正的提高编程能力。
相关推荐
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
本系统基于六种设计模式,运用到的设计模式有备忘录模式,简单工厂模式,迭代器模式,状态模式,模版方法模式,单例模式。 具体实现过程、UML类图以及实现效果详见如下项目说明地址: ... 该系统为绘图系统,该系统通过...
设计模式精解- GoF 23种设计模式解析附C++实现源码 懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要。反之好像也可能成立。道可道,非常道。道不远人,设计模式亦然如此。 一直想把自己的学习经验以及在...
C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计模式(23种设计模式)C_设计...
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代 码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计...
章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之...
《深入浅出设计模式》总结了许多系统软件在设计开发过程中的难点,力图将设计模式的实际应用与实现原理有机结合起来,破解软件开发人员在学习设计模式过程不能透彻理解并灵活运用设计模式的难题。 所有章节都是先...
“[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...
设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...
《Android 源码设计模式解析与实战》不仅分析了Android源代码的设计模式,更结合实例演示了如何使用这些设计模式。看这本书,既能学到如何分析、学习Android源代码,又能提高自己架构设计水平 《Android 源码设计...
尽管该书涉及较多的内容,但书中讨论的设计模式仅仅包含了一个设计行家所知道的部 分。书中没有讨论与并发或分布式或实时程序设计有关的模式,也没有收录面向特定应用领 域的模式。本书并不准备告诉你怎样构造用户界面...
书是美国萨福克大学已使用十余年的经典教程,利用跨平台开源软件开发框架Qt阐释了C++和设计模式中的主要思想。全书共分四个部分:第一部分介绍C++、UML、Qt、模型-视图、SQL、XML、设计模式等基础知识,目的是为零...
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...
运用到的设计模式有备忘录模式,迭代器模式,简单工厂模式,状态模式,模版方法模式,单例模式。 资源包含项目文件(eclipse)以及系统说明(docx文件),系统说明中说明了为什么要使用该模式,使用该模式有什么好处...
24中设计模式 混合设计模式 设计模式实际应用案例 费了很多时间和精力整理的
C# 设计模式.pdf 文档。无论您是新手,还是老手,本教程都值得一读。对于那些具有丰富的开发经验的开发人员,学习设计模式有助于了解在软件开发过程中所面临的问题的最佳解决方案;对于那些经验不足的开发人员,学习...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
阅读本书,读者能够完整地理解12个核心的设计模式和1个分析模式,了解设计模式并不是孤立存在的,多个设计模式协同工作才能创建出更加坚固的应用程序。这里所讲授的12个模式并没有涵盖所有应该学会的模式,但是理解...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...