《设计模式》学习笔记之一——简单工厂模式

        最近在学《大话设计模式》,这本书确实不错,语言很通俗易懂,特别适用于我们初学者。看了这本书之后才发现原来我在编写软件的时候存在很多的不规范,回想起去年参加信息安全竞赛时,我们编写的软件因为导师的一个小小的不满意,我们只好牺牲几个晚上的休息时间,没办法把软件几乎重新写了一遍。更让人头疼的是,刚把这个问题解决了,导师又提出新的问题。那个过程可真是要命啊!而且离提交软件作品的时间也快近了,整个暑假我们浪费了很多时间在这些无用功上面。现在读到这本书,才让我从本质上认识到了这个问题,那就是:当初最早我们在设计软件时还是用计算机的逻辑思维设计,根本没有考虑到封装、继承、多态、重构等。所以每次都因为更改一个小的地方都要把整个软件几乎重写一次,这样的工作量可想而知,而且更让人感到悲哀的是,这些代码根本不能重用,也就只能用在这个软件上面,以后也面临着维护的问题。

       好了,说了那么多。现在讲讲我学到的第一个模式——简单工厂模式,供像我一样的初学者们分享。

       借助简单工厂模式的思想,我自己写了一个Windows桌面程序的计算器:

       首先定义一个抽象类:

 

class Operation
    {
        
//字段,参加运算的两个数
        private double  numberA;
        
private double  numberB;
       
// private double result;
        
//属性
        public double NumberA
        {
            
get { return numberA; }
            
set { numberA = value; }

        }
        
public double NumberB
        {
            
get { return numberB; }
            
set { numberB = value; }
        }
       
        
public virtual double GetResult()
        {
            
double   result = 0;
            
return result;
        }
    }

 

然后其他的具有运算类可以继承该类,并且通过重写GetResult()方法来实现具体的运算操作。以加法类为例:

 

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

 

最后在定义一个类工厂(OperationFactory)来实现实例化:

 

class OperationFactory
    {
        
public static Operation CreatOperation( string op)
        {
            Operation operation
=null ;
            
switch (op)
            {
                
case "+":
                    operation 
= new operationAdd();
                    
break;
                
case "-":
                    operation 
= new operationSub();
                    
break;
                
case "*":
                    operation 
= new operationMult();
                    
break;
                
case "/":
                    operation 
= new operationDiv();
                    
break;


            }
            
return operation;
        }
    }

 

好了计算器的基本类已经定义好了,也许你现在还看不出这样写代码有什么好处,但是等你用你以前的那种计算机逻辑思维来写的话也可以实现。这样通过类封住和继承的好处是计算器便于扩展,而且等有了新的算法可以继续写一个继承Operation的类就行了,

下面给出下载:/Files/LoveHong/DTest.zip

posted @ 2009-04-16 16:47  风雨后的虹  阅读(216)  评论(0)    收藏  举报