• 主要改动部分:

/// <summary>
    /// 6.创建工厂方法模式(抽象工厂:接口)
    /// </summary>
    interface IFactory    //父接口(父类工厂)
    {
        /// <summary>
        /// 此父接口提供一个无参的函数方法
        /// </summary>
        /// <returns></returns>
        Operation CreateOperation();
    }
    /// <summary>
    /// 定义子类工厂,并继承父类工厂(父接口)
    /// </summary>
    class FactoryAdd : IFactory
    {
        /// <summary>
        /// 封装与父类工厂同名函数(返回值类型亦相同)
        /// </summary>
        /// <returns></returns>
        public Operation CreateOperation()
        {
            //返回上面OperationAdd子类
            return new OperationAdd();
        }
    }

  • 源码:
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace FactoryModel
{
//====================使用C#,利用简单工厂模式,实现简单的计算器功能====================
//考察时知识点:面向对象三大特性——继承、封装、多态
/// <summary>
/// 1.定义父类,同时也是一个封装
/// </summary>
class Operation
{
//2.因为要让子类能够对父类进行访问,故应要将参数定义为受保护的变量类型
protected int numberA;
protected int numberB;
//定义属性(必写)
public int NumberA
{
get { return numberA; }
set { numberA = value; }
}
public int NumberB
{
get { return numberB; }
set { numberB = value; }
}
//3.封装虚方法,以供子类进行重写
public virtual int getResule()
{
int result = ;
return result;
}
}
/// <summary>
/// 4.定义子类,继承父类,并对父类进行重写(加法)
/// </summary>
class OperationAdd : Operation
{
public override int getResule()
{
return numberA + numberB;
}
}
/// <summary>
/// 5.定义子类,继承父类,并对父类进行重写(减法)
/// </summary>
class OperationSub : Operation
{
public override int getResule()
{
return numberA - numberB;
}
}
/// <summary>
/// 6.创建工厂方法模式(抽象工厂:接口)
/// </summary>
interface IFactory //父接口(父类工厂)
{
/// <summary>
/// 此父接口提供一个无参的函数方法
/// </summary>
/// <returns></returns>
Operation CreateOperation();
}
/// <summary>
/// 定义子类工厂,并继承父类工厂(父接口)
/// </summary>
class FactoryAdd : IFactory
{
/// <summary>
/// 封装与父类工厂同名函数(返回值类型亦相同)
/// </summary>
/// <returns></returns>
public Operation CreateOperation()
{
//返回上面OperationAdd子类
return new OperationAdd();
}
}
/// <summary>
/// 定义子类工厂,并继承父类工厂(父接口)
/// </summary>
class FactorySub : IFactory
{
/// <summary>
/// 封装与父类工厂同名函数(返回值类型亦相同)
/// </summary>
/// <returns></returns>
public Operation CreateOperation()
{
////返回上面OperationAdd子类
return new OperationSub();
}
}
//7.主函数中进行调用
class Program
{
static void Main(string[] args)
{
//进行加法运算,指定相应的工厂类型即可,无须再次输入运算类型
IFactory i = new FactorySub();
//进行减法运算
//IFactory ii = new FactorySub();
Operation op = i.CreateOperation();
op.NumberA = ;
op.NumberB = ;
//调用子类中的方法来获取结果
int result = op.getResule();
Console.WriteLine(result);
Console.ReadKey();
}
//如果在后续的编程中仍需要有其他的运算,则只需要在子类中加上相应的子类,
//并在工厂方法中中加上相应的工厂类即可即可,无须需改代码,这也就是工厂方法(抽象工厂)的“利”所在
}
}

最新文章

  1. C语言状态机
  2. 平板上的js和电脑上js的不同之处
  3. 删除div
  4. 【python】类中__slots__使用
  5. SQLServer学习笔记&lt;&gt;相关子查询及复杂查询
  6. java获得项目绝对路径
  7. 转 jQuery(图片、相册)插件代码实例
  8. tk资料
  9. Sybase配置数据库参数
  10. AngularJS2环境配置
  11. Go笔记-垃圾回收集和SetFinalizer
  12. 全废话SQL Server统计信息(1)——统计信息简介
  13. [Python]Python中的包(Package)
  14. angular + socket.io+nodejs
  15. 修改HAL标准库用printf函数发送数据直接输出
  16. SpringBoot使用HttpClient远程调用
  17. ThinkPHP框架 AJAX方法返回 AJAX实现分页例子:
  18. 【Skynet】Traceback汇总
  19. ROWID面试题-删除表中重复数据(重复数据保留一个)
  20. Selenium之IE浏览器的启动

热门文章

  1. SSH常见错误
  2. Pulse-code modulation
  3. 高清摄像头MIPI CSI2接口浅解【转】
  4. YTU 2945: 编程:五元向量的运算
  5. android编程取消标题栏方法(appcompat_v7、Theme.NoTitleBar)
  6. VS2013在右键菜单添加命令插件开发
  7. CentOS 7安装并设置启动图形桌面
  8. Akka源码分析-Serialization
  9. maven-将依赖的 jar包一起打包到项目 jar 包中
  10. EditextText输入类型