在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
阅读: 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(); } 最新新闻: 网站导航:博客园首页 个人主页 新闻 闪存 小组 博问 社区 知识库 |
请发表评论