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

mac2022-06-30  21

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

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

       借助简单工厂模式的思想,我自己写了一个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

转载于:https://www.cnblogs.com/LoveHong/archive/2009/04/16/1437348.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)