zoukankan      html  css  js  c++  java
  • 使用了继承、多态还有工厂模式和反射,但是还是没有OO的感觉。[已经增加了实现的代码]

    最近项目里遇到了一个问题,为了解决这个问题“动用了”继承、多态还有工厂模式和反射,但是还是没有OO的感觉。呵呵。

    先说一下具体情况:
    1、使用短信猫来接收短信。简单的说,短信猫收到短信后会往指定的表里面填写数据。
    2、接收到短信,然后根据短信前面的“标志”调用不同的方式来处理。
    3、发送确认信息或者是错误提示。
    4、想做成一个“通用”的模块,不管是什么项目,都可以使用这个程序来处理接收短信的问题。当然具体的处理方式要能很方便的修改或者扩充。


    我的实现方式:
    1、定义一个基类,用来处理接收到的短信。
    2、由于每一种短信的处理方式都不同,所以需要好多的不同的子类。每一个子类来处理一种短信。
    3、调用的时候 如果用 case 的方式的话,每增加一总短信都要修改case 。很烦!而且当应用在一个项目里的时候,case 就得推倒重来,烦!
         最后使用了反射。
    4、建立了三个项目,一个是winform的用来检查表里面是否有新的短信,叫做A ;一个是处理短信的项目,叫做B;最后一个就是具体的项目了。

    ==============
    说明:
     具体的项目指的是,可能是A公司的OA,可能是B公司的CRM,也可能是C公司的ERP。
     这里说的是分“项目”,而不是分层。
     处理短信的项目要根据不同的公司的不同的需求来编写,写完了之后编译成DLL,交由 A 来调用。
    ==============

    5、其中 A 是通用的,写好了基本不变。B编译成dll,好让A来调用。
    6、A 调用处理短信的类。由于使用了反射,可以“动态”的指定dll名称和类名。这样就很灵活了,处理短消息的方式有变化的话,只需要更新dll就可以了。
      换成新的项目的时候,换成新的dll就可以了。这样A就不用改了。


    现在基本功能是实现了,但是这样就OO了吗?还是没有OO感觉。

    感觉还是在用面向过程的思路来写程序,一个子类里面只有一个函数,和面成过程有什么区别呢?

    您可能要问了,那我为什么还要用多态呢?其实很简单,这样就可以使用“反射”了,这样我就不用写case了,可以让A不必随不同的项目而修改了。

    说白了就是想当变化的时候少改点代码。

    正在看面向对象、设计模式了什么的,把自己的想法、做法写出来,请大家批批。


    ps:这里好象用“观察者”更好一点,A就是一个发布者,B是一个订阅者,只是我不知道如何让B来订阅A。
    也许根本就不适合吧,毕竟有新的短信了,只有一种处理方法是对应的,其他的都不是。

    代码补充:

    namespace HBS.SMSReceive
    {
        
    /// <summary>
        
    /// 接收短信。基类
        
    /// </summary>

        public class MessageReceive
        
    {
            
    public DataAccessLayer dal ;
            
            
    处理短信的函数

            
    把短信移动到历史记录里面
        }


        
    子类1:处理没有标志的短信

        
    子类2:MessageOperation01 第一种短信的回执
    }



    然后就是A里面的调用的代码

    //获取短信内容,放在 DataTable dt 里面
    //然后遍历 dt

    Assembly.Load("SMS").CreateInstance("SMS.短信" + 短信开头的编号)

    代码补充:
    处理接收到的短信


    大体就是这样了。


    反射还是在看了伍迷的小菜系列才会用的,再此表示感谢。
  • 相关阅读:
    HDOJ 2095 find your present (2)
    HDOJ 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
    九度 1337 寻找最长合法括号序列
    九度 1357 疯狂地Jobdu序列
    HDOJ 1280 前m大的数
    九度 1343 城际公路网
    九度 1347 孤岛连通工程
    HDOJ 2151 Worm
    九度 1342 寻找最长合法括号序列II
    九度 1346 会员积分排序
  • 原文地址:https://www.cnblogs.com/jyk/p/1040413.html
Copyright © 2011-2022 走看看