新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 软件工程、需求工程、系统工程,UML、MDA、模型驱动开发,面向对象软件工程、面向目标软件成功、面向场景的设计、敏捷
    [返回] 计算机科学论坛计算机技术与应用『 软件工程论坛 』 → [原创]理解设计模式(一)工厂模式 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 11796 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [原创]理解设计模式(一)工厂模式 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     wcdxyl 帅哥哟,离线,有人找我吗?天秤座1980-10-9
      
      
      威望:4
      等级:大四(每天看1小时莱昂氏)(版主)
      文章:158
      积分:1145
      门派:IEEE.ORG.CN
      注册:2006/3/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给wcdxyl发送一个短消息 把wcdxyl加入好友 查看wcdxyl的个人资料 搜索wcdxyl在『 软件工程论坛 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看wcdxyl的博客楼主
    发贴心情 [原创]理解设计模式(一)工厂模式

    软件开发过程中需求变更是家常便饭,调研不充分,特殊情况,设计失误都会打乱原来的计划,实际表明瀑布开发实在是一种太理想的状态。除了采用迭代开发模式以外,开发方法也必须讲究,这样才能适应以后的需求变化,不会前功尽弃。办法只有一个,利用设计模式,避免使用硬编码。我最近看了一些设计模式把自己的理解共享给大家。

      工厂模式 就是通过一个工厂类创建所有类,好处是隐藏了具体类的实现细节,可以根据参数决定生成哪些具体类的实例。并且可以推迟到运行的时候才决定要创建哪个类的实例,而不是在编译时就必须知道要实例化哪个类,可见避免了硬编码。也就是说一旦要创建实例只需要通过工厂类创建就可以了,降低了耦合度。
      但是这种模式有两个问题,第一个是随着使用类的增加就使工厂类变得复杂,还有个问题是如果工厂类出了问题将导致整个系统不能使用。解决第一个问题可以建立多个抽象工厂类,而第二个问题可以尽量分类工厂类,最好按模块分。
      另外循环使用一个对象的时候可以通过工厂类建立一个对象池,这样每当客户请求工厂方法创建相应的对象时,可以先从对象池中查询符合条件的产品对象,如果对象池中有这样的对象,那就直接将这个产品对象返回给客户端;如果对象池中没有这样的对象,那就创建一个新的产品对象,将其登记到对象池中,然后再返回给客户端。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    主页:http://wcdxyl.blogchina.com
    MSN:wcdxyl@163.com

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/10/19 16:32:00
     
     pennyliang 帅哥哟,离线,有人找我吗?白羊座1979-4-7
      
      
      威望:8
      等级:大二期末(C++考了100分!)
      文章:266
      积分:1911
      门派:Lilybbs.net
      注册:2005/3/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给pennyliang发送一个短消息 把pennyliang加入好友 查看pennyliang的个人资料 搜索pennyliang在『 软件工程论坛 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看pennyliang的博客2
    发贴心情 
    工厂模式首要条件是面向接口编程,设计模式,从每个模式命名可以知道,是面向应用的,换句话说不是本质,而是现象。
          对一个对象的请求,之前,应用已经获得了该对象接口的全部,只是不知道具体的对象,用工厂模式最为恰当,为了更好的说明问题,举个例子。
          以下是伪码。
          interface user
          int get_id();
          bool is_boy();
          bool is_girl();
          void dispose();
          ......
    -----------------------------应用一端--------------------------
    user* my_user = Factory.Create(SYSTEM_USER);   //这里应用必须知道Factory的实例,所以的应用和Factory耦合。但是Factor.Create,如何实例化一个对象并不需要应用一端关心。
    。。。。
    my_user->dispose(); //注意应用一端只知道接口,不知道具体类型,所以不能delete my_user.

    ------------------------------工厂一端--------------------------
    class Factory
    user* Create(int type)
    {
         if(SYSTEM_USER == type)
         {
               return new pennyliang();
         }
    }

    面向对象是理论化很强的学科,设计模式只是面向应用的一个方面,希望大家从面向对象本质去了解问题。设计模式好比招式,而且招式也远不是设计模式所能概括的,对设计模式的评价不能展开了,希望这个例子大家能够理解,面向接口编程而不是面向实现编程才是工厂模式的真谛。依赖倒置原理(DIP),也是工厂方式的内在涵义。

    }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/21 11:08:00
     
     pennyliang 帅哥哟,离线,有人找我吗?白羊座1979-4-7
      
      
      威望:8
      等级:大二期末(C++考了100分!)
      文章:266
      积分:1911
      门派:Lilybbs.net
      注册:2005/3/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给pennyliang发送一个短消息 把pennyliang加入好友 查看pennyliang的个人资料 搜索pennyliang在『 软件工程论坛 』 的所有贴子 引用回复这个贴子 回复这个贴子 查看pennyliang的博客3
    发贴心情 
    工厂模式首要条件是面向接口编程,设计模式,从每个模式命名可以知道,是面向应用的,换句话说不是本质,而是现象。
          对一个对象的请求,之前,应用已经获得了该对象接口的全部,只是不知道具体的对象,用工厂模式最为恰当,为了更好的说明问题,举个例子。
          以下是伪码。
          interface user
          int get_id();
          bool is_boy();
          bool is_girl();
          void dispose();
          ......
    -----------------------------应用一端--------------------------
    user* my_user = Factory.Create(SYSTEM_USER);   //这里应用必须知道Factory的实例,所以的应用和Factory耦合。但是Factor.Create,如何实例化一个对象并不需要应用一端关心。
    。。。。
    my_user->dispose(); //注意应用一端只知道接口,不知道具体类型,所以不能delete my_user.

    ------------------------------工厂一端--------------------------
    class Factory
    user* Create(int type)
    {
         if(SYSTEM_USER == type)
         {
               return new pennyliang();
         }
    }

    面向对象是理论化很强的学科,设计模式只是面向应用的一个方面,希望大家从面向对象本质去了解问题。设计模式好比招式,而且招式也远不是设计模式所能概括的,对设计模式的评价不能展开了,希望这个例子大家能够理解,面向接口编程而不是面向实现编程才是工厂模式的真谛。依赖倒置原理(DIP),也是工厂方式的内在涵义。

    }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/12/21 11:14:00
     
     GoogleAdSense白羊座1979-4-7
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 软件工程论坛 』 的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/23 10:33:41

    本主题贴数3,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    46.875ms