编辑: You—灰機 2016-09-20
file:///E|/上传工具/docinbao/download/设计/设计模式.

txt[2011-4-4 12:02:22] 作者: AI92 yuanyk@gmail . com 工厂模式(静态工厂模式、 工厂方法模式、 抽象工厂模式)

一、 引子 话说十年前, 有一个暴发户, 他家有三辆汽车――Benz 奔驰、 Bmw 宝马、 Audi 奥迪, 还雇了司机为他开车. 不过, 暴发户坐车时总是怪怪的: 上Benz 车后跟司机说 开奔驰车! , 坐上 Bmw 后他说 开宝马车! , 坐上 Audi 说 开奥迪车! . 你一定说: 这人有病! 直接说 开车不就行了? ! 而当把这个暴发户的行为放到我们程序设计中来时, 会发现这是一个普遍存在的现象. 幸运的是, 这种有病的现象在 OO(面向对象) 语言中可以避免了. 下面就以 Java 语言为 基础来引入我们本文的主题: 工厂模式.

二、 分类 工厂模式主要是为创建对象提供过渡接口, 以便将创建对象的具体过程屏蔽隔离起来, 达到提高灵活性的目的. 工厂模式在《Java 与模式》 中分为三类:

1 ) 简单工厂模式(Simple Factory) 2) 工厂方法模式(Factory Method) 3) 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象, 并且更具一般性. GOF 在《设计模式》 一书中将工厂模式分为两类: 工厂方法模式(Factory Method) 与 抽象工厂模式(Abstract Factory). 将简单工厂模式(Simple Factory) 看为工厂方法模式的 一种特例, 两者归为一类. 两者皆可, 在本文使用《Java 与模式》 的分类方法. 下面来看看这些工厂模式是怎么 来 治病 的.

三、 简单工厂模式 简单工厂模式又称静态工厂方法模式. 重命名上就可以看出这个模式一定很简单. 它存 在的目的很简单: 定义一个用于创建对象的接口. 先来看看它的组成:

1 ) 工厂类角色: 这是本模式的核心, 含有一定的商业逻辑和判断逻辑. 在j ava中它往往由 一个具体类实现. file:///E|/上传工具/docinbao/download/设计/设计模式.txt[2011-4-4 12:02:22] 2) 抽象产品角色: 它一般是具体产品继承的父类或者实现的接口. 在j ava中由接口或者抽 象类来实现. 3) 具体产品角色: 工厂类所创建的对象就是此角色的实例. 在j ava中由一个具体类实现. 来用类图来清晰的表示下的它们之间的关系(如果对类图不太了解, 请参考我关于类图 的文章) 那么简单工厂模式怎么来使用呢? 我们就以简单工厂模式来改造暴发户坐车的方式 ――现在暴发户只需要坐在车里对司机说句: 开车 就可以了. / / 抽象产品角色 public interface Car{ public void drive() ;

} / / 具体产品角色 public class Benz implements Car{ public void drive( System. out. println( Driving Benz ) ;

} } public class Bmw implements Car{ public void drive( System. out. println( Driving Bmw ) ;

} } . . . (奥迪我就不写了: P) / / 工厂类角色 public class Driver{ / / 工厂方法. 注意 返回类型为抽象产品角色 public static Car driverCar(String s) throws Exception { / / 判断逻辑, 返回具体的产品角色给 Client if(s. equalsIgnoreCase( Benz ) ) file:///E|/上传工具/docinbao/download/设计/设计模式.txt[2011-4-4 12:02:22] return new Benz() ;

else if(s. equalsIgnoreCase( Bmw ) ) return new Bmw() ;

else throw new Exception() ;

/ / 欢迎暴发户出场. public class Magnate{ public static void main(String[] args) { try{ / / 告诉司机我今天坐奔驰 Car car = Driver. driverCar( benz ) ;

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题