• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET工厂模式

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

阅读: 11 评论: 0 作者: eng308 发表于 2010-02-06 01:27 原文链接

一、引子
           话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰)、Bmw(宝马)、Audi(奥迪)看来这人比较爱国,没有日本车),还雇了司机为他开车。不过,爆发户坐车时总是这样:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi后他说“开奥迪车!”。
           你一定说:这人有病!直接说开车不就行了?!
           而当把这个爆发户的行为放到我们程序语言中来,我们发现C语言一直是通过这种方式来坐车的!
           幸运的是,这种有病的现象在OO语言中可以避免了。下面以Java语言为基础来引入我们本文的主题:工厂模式!!
    二、简介
           工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类:
                   1. 简单工厂模式(Simple Factory)                
                   2. 工厂方法模式(Factory Method)
                   3. 抽象工厂模式(Abstract Factory)
           这三种模式从上到下逐步抽象,并且更具一般性。
           还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。两者皆可,这本为使用《Java与模式》的分类方法。
           在什么样的情况下我们应该记得使用工厂模式呢?大体有两点:
                   1.在编码时不能预见需要创建哪种类的实例。
               2.系统不应依赖于产品类实例如何被创建、组合和表达的细节
         ....................................
四、工厂方法模式
           先来看下它的组成吧:
                       抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
                       具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
                       抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
                       具体产品角色:具体工厂角色所创建的对象就是此角色的实例。
public abstract class car       //抽象产品
       {
           public abstract void     Drive();
       }
       public class bens : car //具体产品1
       {
           public override void Drive()
           {
               throw new Exception("The method or operation is not implemented.");
           }
    
       }
       public class bmw : car     //具体产品2
       {
           public override void Drive()
           {
               throw new Exception("The method or operation is not implemented.");
           }
       }
       public abstract class driver     //抽象工厂
       {
         public abstract     car divercar();  
       }
       public class benzdriver : driver //具体工厂1
       {
           public override car divercar()
           {
               return new bens();
           }
    
       }
       public class bmwdriver : driver //具体工厂2
       {
           public override car divercar()
           {
               return new bmw();
           }
       }
       public class test  
     {
           public static void main()
           {
               driver dri = new benzdriver();
               car ca = dri.divercar();
               ca.Drive();        
        
           }

评论: 0 查看评论 发表评论


最新新闻:
· 传盛大密签王菲 春晚实为游戏电影造势(2010-02-06 12:28)
· 商业周刊:乔布斯iPad志在云计算(2010-02-06 12:27)
· 十大最佳Ajax教程(2010-02-06 12:21)
· 微软下周不修复新IE漏洞(2010-02-06 12:18)
· Firefox 4.0演示视频曝光(2010-02-06 12:10)

编辑推荐:ASP.NET MVC 2 RC 2 发布

网站导航:博客园首页  个人主页  新闻  闪存  小组  博问  社区  知识库


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
关于ASP.netTextBox控件的失去焦点后触发其它事件发布时间:2022-07-10
下一篇:
asp.net如何使用cookies发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap