`

工厂方法从建模到代码演练

 
阅读更多
1.用vs2013建模(计算器实现)
选择建模项目,然后现在添加类图;添加一个包是为了让我们设计的类图后期自动生成代码时类就在统一的命名空间之下

自动生成代码的类

2 运算类
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool
//     Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FactoryMethod
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;

	public class Operation
	{
		public virtual Double NumberA
		{
			get;
			set;
		}

		public virtual Double NumberB
		{
			get;
			set;
		}

		public virtual Double GetResult()
		{
			throw new System.NotImplementedException();
		}

	}
}

3.继承实现计算的具体4个类

加法类
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool
//     Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FactoryMethod
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;

	public class OperationAdd : Operation
	{
		public override Double GetResult()
		{
                     double result = 0;
                     result = NumberA + NumberB;
                     return result;
		}

	}
}

除法类

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool
//     Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FactoryMethod
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;

	public class OperationDiv : Operation
	{
		public override Double GetResult()
		{
		   double result = 0;
                     if (NumberB == 0)
                     throw new Exception("除数不能为0。");
                     result = NumberA / NumberB;
                     return result;		
                 }
	}
}

乘法类
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool
//     Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FactoryMethod
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;

	public class OperationMul : Operation
	{
		public override Double GetResult()
		{
			double result = 0;
                          result = NumberA * NumberB;
                          return result;		
                  }

	}
}

减法类
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool
//     Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FactoryMethod
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;

	public class OperationSub : Operation
	{
		public override Double GetResult()
		{
			double result = 0;
                          result = NumberA - NumberB;
                          return result;
		}

	}
}

定义计算工厂接口
   
   契约:工厂必须具有返回计算的功能

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool
//     Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FactoryMethod
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;

	public interface IFactory 
	{
		Operation Operation { get;set; }

		Operation CreateOperation();
                   
	}
}

乘法工厂
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool
//     Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FactoryMethod
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;

	public class MulFactory : IFactory
	{
		public virtual Operation CreateOperation()
		{
                     return new OperationMul();
			 
		}

	}
}


除法工厂
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool
//     Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FactoryMethod
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;

	public class DivFactory : IFactory
	{
		public virtual Operation CreateOperation()
		{
            return new OperationDiv();
		}

	}
}

加法工厂

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool
//     Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FactoryMethod
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;

	public class OperationAdd : Operation
	{
		public override Double GetResult()
		{
            return new OperationAdd();
		}

	}
}

加法工厂

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool
//     Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FactoryMethod
{
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;

	public class AddFactory : IFactory
	{
		public virtual Operation CreateOperation()
		{
            return new OperationAdd();
		}

	}
}

5.调用试用一下


      
 static void Main(string[] args)
        {
            IFactory operFactory = new AddFactory();
            Operation oper = operFactory.CreateOperation();
            oper.NumberA = 1;
            oper.NumberB = 2;
            double result=oper.GetResult();

            Console.WriteLine(result);

            Console.Read();
        }


意图:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。

适用:
1.当一个类不知道它所必须创建的对象的类的时候。
2.当一个类希望由它的子类来指定它所创建的对象的时候。
3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是 代理者这一信息局部化的时候。
  • 大小: 42.5 KB
分享到:
评论

相关推荐

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷3

    pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者...

    Rational Rose 基础教程电子教案

    本教程旨在帮助初学者快速掌握Rational Rose 2003的基本功能和使用方法,从而能够有效地进行软件的需求分析、设计与系统建模。 ### 1. UML概述 UML(统一建模语言)是软件工程领域一种标准化的建模语言,用于可视...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷10

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷5

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷7

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷9

    综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷2

    pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷4

    pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者...

    FJ3D:福建3D工厂演示

    3D工厂演示通常用于教育、培训或展示目的,帮助观众理解复杂的工业流程,或者在虚拟环境中进行安全演练。 在“FJ3D-master”这个压缩包文件名中,“master”通常是指项目的主分支,这表明你获取的是该项目的最新、...

    java大学教程

    - **软件生命周期**:了解软件从需求分析到最终发布的整个过程,包括需求分析、设计、编码、测试、部署等各个阶段。 - **软件质量保证**:探讨如何确保软件的质量,包括代码审查、单元测试、集成测试等质量保证措施...

    软件设计师04-11年试题与答案

    1. **需求分析**:这部分试题通常涉及到如何理解和表述用户需求,如何使用工具进行需求建模,如用例图、活动图、状态机图等UML(统一建模语言)图表。 2. **系统设计**:设计模式是软件设计中的重要概念,试题可能...

    祝成科技,软件架构设计培训

    1. **汇聚全球顶级技术专家**:由具有丰富实战经验的资深架构师授课,确保学员能够学到最前沿的技术和方法论。 2. **全面覆盖多个技术领域**:除了软件架构设计外,还包括.NET平台、C++开发、Java开发等多个方向的...

    软件设计师试题 教程

    《软件设计师试题教程》资源包含了从2004年至2011年下半年的完整试题集与答案,同时提供了关于软件设计模式的专业文档以及软件设计师的教程电子版。这些资料对于准备软件设计师考试或者想要深入理解软件设计原理和...

    Marco Cantu - Mastering Delphi 7.pdf

    - 开发流程:从设计到实现的过程。 - 测试策略:确保组件稳定可靠的方法。 10. **库和包(Libraries and Packages)** - 包管理:如何管理和组织多个库和包。 - 兼容性问题:解决不同版本之间可能存在的兼容性...

    软件设计师教程 第4版.pdf

    2. **设计模式**:讲解了常见的设计模式,如工厂模式、单例模式、观察者模式、装饰器模式等,这些模式是软件设计中的通用解决方案,能够提高代码的可读性和可维护性。 3. **面向对象设计**:深入探讨面向对象编程的...

    cpp-oop-kata

    2. **继承**:继承允许一个类(子类)从另一个类(父类)中获取属性和方法,从而实现代码复用和扩展性。cpp-oop-kata可能会包含多个类之间的继承关系,让你实践如何有效地利用继承构建类层次结构。 3. **多态**:...

    软件工程英文版课后习题答案

    掌握软件工程的知识与技能,不仅需要理解复杂的理论概念,更需要通过实践锻炼和实战演练来加以深化和应用。为此,一份详实的课后习题解答集,如《软件工程英文版课后习题答案》便成为了学习过程中的得力助手。本资源...

Global site tag (gtag.js) - Google Analytics