使用简单工厂模式改写“生成+-*/”

本文介绍了一个使用C#实现的简单工厂模式来生成加法和减法表达式的示例。通过随机生成数字并构建表达式,该程序能够帮助学生练习基本的算术运算。
本代码用于改写 http://www.cnblogs.com/resake/archive/2008/06/23/1228039.html提到的 生成+-*/表达式。

using  System;
using  System.Collections.Generic;

#region  应用程序入口
public   class  Resake
{
    
public   static   void  Main()
    {
        Expresstion ea 
=  ExpresstionFactory.CreateExpresstion( ' + ' );
        ea.MakeExpresstion();
        ea.ShowResult();
        
        ea 
=  ExpresstionFactory.CreateExpresstion( ' - ' );
        ea.MakeExpresstion();
        ea.ShowResult();
        
        Console.ReadLine();
    }

}
#endregion  

#region  实际类
public   abstract   class  Expresstion  // 基类
{
    
protected  Random rnd  =   new  Random();
    
protected   int  result,num1,num2,input;
    
protected   readonly   int  seed  =   20 ;
    
public   abstract   void  MakeExpresstion();
    
public   virtual   void  ShowResult()
    {
        Console.WriteLine(
" num1: {0}, num2: {1}, result: {2} " ,num1,num2,result);
    }
}

public   class  ExpresstionAdd:Expresstion  // 加法
{
    
public   override   void  MakeExpresstion()
    {
        result 
=  rnd.Next( 1 ,seed);
        num1 
=  rnd.Next( 1 ,result);
        num2 
=  result  -  num1;        
    }
    
    
public   override   void  ShowResult()
    {
        Console.WriteLine(
" {0} + {1} = ? ({2}) " ,num1,num2,result);
    }
    
}

public   class  ExpresstionSub:Expresstion  // 减法
{
    
public   override   void  MakeExpresstion()
    {
        result 
=  rnd.Next( 1 ,seed);
        num2 
=  rnd.Next( 1 ,result);
        num1 
=  result + num2;
    }
    
    
public   override   void  ShowResult()
    {
        Console.WriteLine(
" {0} - {1} = ? ({2}) " ,num1,num2,result);
    }
}
#endregion  

#region   简单工厂
public   static   class  ExpresstionFactory
{
    
public   static  Expresstion CreateExpresstion( char  operat)
    {
        Expresstion exp 
=   null ;
        
switch (operat)
        {
            
case   ' + ' :
                exp 
=   new  ExpresstionAdd();
                
break ;
            
case   ' - ' :
                exp 
=   new  ExpresstionSub();
                
break ;
        }
        
return  exp;
    }
}
#endregion

转载于:https://www.cnblogs.com/resake/archive/2008/06/23/1228272.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值