- 浏览: 323233 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
arlenliugj:
才发现这贴子好早
如何在Ubuntu下安装windows7 -
arlenliugj:
请问一下,这样安装上windows会不会把已经装好的linux ...
如何在Ubuntu下安装windows7 -
zhaomengbin:
写的很不错,可以写个文件给合并的方法么?,将分割后的几份文件还 ...
文件分割程序 -
junhe0723:
3Q,刚出现这个问题解决了。
jvm terminated exit code 1 -
Anddy:
shell 双击选中太不智能了。
XSHELL快捷键设置
1、工厂模式的核心思想及分类
工厂方法模式的作用是负责实例化同一个接口的多个类。工厂方法模式的意义是定义一个创建产品对象的工厂类,由该工厂统一创建继承了同一个接口的多个产品对象。
工厂方法可以分为三个子类型:
• 工厂方法模式(Factory Method):最基本的工厂模式;
• 多个工厂方法模式:对工厂方法模式的扩展;
• 简单工厂模式(Simple Factory):一种特殊的工厂模式,其工厂方法是静态的,因此也称为静态工厂方法模式
2、第一种——工厂方法模式
工厂方法模式提供了一个工厂方法类,并提供了一个工厂方法函数,该方法负责创建所有的抽象产品对象。
仍然使用互联网上广为流传的****户装B的例子:
话说十年前,有一个****户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,****户坐车时总是怪怪的:上 Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?!
而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运的是,这种有病的现象在OO(面向对象)语言中可以避免了。
Java代码
1. //接口(抽象产品角色)
2. public interface Car{
3. public void drive();
4. }
5.
6. //具体产品角色
7. public class Benz implements Car{
8. public void drive() {
9. System.out.println("Driving Benz ");
10. }
11. }
12.
13. public class Bmw implements Car{
14. public void drive() {
15. System.out.println("Driving Bmw ");
16. }
17. }
18. //...其他车的实现
19.
20. //工厂方法类
21. public class Driver{
22. //工厂方法.注意 返回类型为抽象产品角色
23. public Car driveCar(String s)throws Exception{
24. //判断逻辑,返回具体的产品角色给Client
25. if(s.equalsIgnoreCase("Benz"))
26. return new Benz();
27. else if(s.equalsIgnoreCase("Bmw"))
28. return new Bmw();
29. ......
30. else throw new Exception();
31. }
32. }
33.
34. //使用:欢迎暴发户出场.....
35. public class Magnate{
36. public static void main(String[] args){
37. try{
38. Driver driver = new Driver();
39. //告诉司机我今天坐奔驰
40. Car car = driver.driveCar("benz");
41. //下命令:开车
42. car.drive();
43. ...
44. }
45. }
3、第二种——多个工厂方法模式
对于第一种工厂方法模式。每次调用driveCar函数时必须传入一个类型参数。这种工厂类显得比较稚嫩,因为当传递参数错误时,就不能正确的创建产品。
第二种工厂模式为工厂类提供多个工厂方法,分别创建不同的产品对象。
//工厂方法类
Java代码
1. public class Driver{
2. public Car driveBmw(){
3. return new Bmw();
4. }
5.
6. public Car driveBenz(){
7. return new Benz();
8. }
9.
10. //....
11. }
12.
13. //使用:欢迎暴发户出场.....
14. public class Magnate{
15. public static void main(String[] args){
16. try{
17. Driver driver = new Driver();
18. //告诉司机我今天坐奔驰
19. Car car = driver.driveBenz();
20. //下命令:开车
21. car.drive();
22. ...
23. }
24. }
4、第三种——静态工厂方法模式(简单工厂模式)
经过以上的改进,使得工厂类已经很完美了,但是还是美中不足。因为每一次创建实例需要使用工厂类时,都需要创建工厂类。此时可以使用静态工厂模式,将工厂方法设置为静态的。
Java代码
1. public class Driver{
2. public static Car driveBmw(){
3. return new Bmw();
4. }
5.
6. public static Car driveBenz(){
7. return new Benz();
8. }
9.
10. //....
11. }
12.
13. //使用:欢迎暴发户出场.....
14. public class Magnate{
15. public static void main(String[] args){
16. try{
17. //告诉司机我今天坐奔驰
18. Car car = driver.driveBenz();
19. //下命令:开车
20. car.drive();
21. ...
22. }
23. }
5、工厂方法模式中涉及的角色
抽象工厂,具体工厂,抽象产品,具体产品。
6、工厂方法模式使用的前提
• 有创建一批有相同接口对象的需求
• 不想暴露太多类的细节给使用者,或者隐藏对象的创建工作
• 产品的等级机构比较复杂,使用简单工厂模式可能会造成扩展性问题。
• 当一个类不知道他必须创建的类的时候,或者一个类希望由他的子类制定他所创建的对象的时候。举个例子:系统框架使用抽象类定义,创建和 维护对象之间的关系,但通常这些具体的类需要有客户端来具体化,对于框架无法知道具体子类的情况下,使用工厂模式来进行框架的开发维护。所以,工厂模式也 被称作“虚拟构造器”
7、工厂方法模式的优点缺点
优点:
• 优化了简单工厂模式,做到了“开-闭”原则。
• 可以做到把具体的产品创建过程延迟的具体的子类工厂,使得基类工厂可以基于工厂方法创建的抽象对象工作。
缺点:
• 暴露具体工厂,但多数情况这不会造成问题,尤其是对于虚拟构造器,就显得更加合理。
对于工厂方法模式子类创建的模式,有点让大家联想到模版模式,其主要区别是工厂方法模式主要目的是把创建工作推迟到子类,而模版模式则是把剩余的逻辑交给子类。这二者也可以结合起来使用。
工厂方法模式的作用是负责实例化同一个接口的多个类。工厂方法模式的意义是定义一个创建产品对象的工厂类,由该工厂统一创建继承了同一个接口的多个产品对象。
工厂方法可以分为三个子类型:
• 工厂方法模式(Factory Method):最基本的工厂模式;
• 多个工厂方法模式:对工厂方法模式的扩展;
• 简单工厂模式(Simple Factory):一种特殊的工厂模式,其工厂方法是静态的,因此也称为静态工厂方法模式
2、第一种——工厂方法模式
工厂方法模式提供了一个工厂方法类,并提供了一个工厂方法函数,该方法负责创建所有的抽象产品对象。
仍然使用互联网上广为流传的****户装B的例子:
话说十年前,有一个****户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,****户坐车时总是怪怪的:上 Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?!
而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运的是,这种有病的现象在OO(面向对象)语言中可以避免了。
Java代码
1. //接口(抽象产品角色)
2. public interface Car{
3. public void drive();
4. }
5.
6. //具体产品角色
7. public class Benz implements Car{
8. public void drive() {
9. System.out.println("Driving Benz ");
10. }
11. }
12.
13. public class Bmw implements Car{
14. public void drive() {
15. System.out.println("Driving Bmw ");
16. }
17. }
18. //...其他车的实现
19.
20. //工厂方法类
21. public class Driver{
22. //工厂方法.注意 返回类型为抽象产品角色
23. public Car driveCar(String s)throws Exception{
24. //判断逻辑,返回具体的产品角色给Client
25. if(s.equalsIgnoreCase("Benz"))
26. return new Benz();
27. else if(s.equalsIgnoreCase("Bmw"))
28. return new Bmw();
29. ......
30. else throw new Exception();
31. }
32. }
33.
34. //使用:欢迎暴发户出场.....
35. public class Magnate{
36. public static void main(String[] args){
37. try{
38. Driver driver = new Driver();
39. //告诉司机我今天坐奔驰
40. Car car = driver.driveCar("benz");
41. //下命令:开车
42. car.drive();
43. ...
44. }
45. }
3、第二种——多个工厂方法模式
对于第一种工厂方法模式。每次调用driveCar函数时必须传入一个类型参数。这种工厂类显得比较稚嫩,因为当传递参数错误时,就不能正确的创建产品。
第二种工厂模式为工厂类提供多个工厂方法,分别创建不同的产品对象。
//工厂方法类
Java代码
1. public class Driver{
2. public Car driveBmw(){
3. return new Bmw();
4. }
5.
6. public Car driveBenz(){
7. return new Benz();
8. }
9.
10. //....
11. }
12.
13. //使用:欢迎暴发户出场.....
14. public class Magnate{
15. public static void main(String[] args){
16. try{
17. Driver driver = new Driver();
18. //告诉司机我今天坐奔驰
19. Car car = driver.driveBenz();
20. //下命令:开车
21. car.drive();
22. ...
23. }
24. }
4、第三种——静态工厂方法模式(简单工厂模式)
经过以上的改进,使得工厂类已经很完美了,但是还是美中不足。因为每一次创建实例需要使用工厂类时,都需要创建工厂类。此时可以使用静态工厂模式,将工厂方法设置为静态的。
Java代码
1. public class Driver{
2. public static Car driveBmw(){
3. return new Bmw();
4. }
5.
6. public static Car driveBenz(){
7. return new Benz();
8. }
9.
10. //....
11. }
12.
13. //使用:欢迎暴发户出场.....
14. public class Magnate{
15. public static void main(String[] args){
16. try{
17. //告诉司机我今天坐奔驰
18. Car car = driver.driveBenz();
19. //下命令:开车
20. car.drive();
21. ...
22. }
23. }
5、工厂方法模式中涉及的角色
抽象工厂,具体工厂,抽象产品,具体产品。
6、工厂方法模式使用的前提
• 有创建一批有相同接口对象的需求
• 不想暴露太多类的细节给使用者,或者隐藏对象的创建工作
• 产品的等级机构比较复杂,使用简单工厂模式可能会造成扩展性问题。
• 当一个类不知道他必须创建的类的时候,或者一个类希望由他的子类制定他所创建的对象的时候。举个例子:系统框架使用抽象类定义,创建和 维护对象之间的关系,但通常这些具体的类需要有客户端来具体化,对于框架无法知道具体子类的情况下,使用工厂模式来进行框架的开发维护。所以,工厂模式也 被称作“虚拟构造器”
7、工厂方法模式的优点缺点
优点:
• 优化了简单工厂模式,做到了“开-闭”原则。
• 可以做到把具体的产品创建过程延迟的具体的子类工厂,使得基类工厂可以基于工厂方法创建的抽象对象工作。
缺点:
• 暴露具体工厂,但多数情况这不会造成问题,尤其是对于虚拟构造器,就显得更加合理。
对于工厂方法模式子类创建的模式,有点让大家联想到模版模式,其主要区别是工厂方法模式主要目的是把创建工作推迟到子类,而模版模式则是把剩余的逻辑交给子类。这二者也可以结合起来使用。
发表评论
-
访问者模式
2011-02-21 17:25 915话说有一个银行,有三个窗口,但是每个窗口的智能都是一样的,即都 ... -
迭代器模式
2011-02-21 17:25 971【迭代器模式】 迭代器可以顺序访问一个聚集中的元素而不必显露聚 ... -
装饰器模式
2011-02-21 17:25 1911浅谈装饰器模式 序: 今天,为了满足我们项目组长的愿望, ... -
解释器模式
2011-02-21 17:24 1006一、引子 其实没有什么好的例子引入解释器模式,因为它描述了 ... -
命令模式
2011-02-21 17:24 10021.意图: 将一个请求或操作封装到对象中。 2 ... -
策略模式
2011-02-21 17:23 821当我们掌握了Java的语法,当我们了解了面向对象的封装、继承、 ... -
状态模式
2011-02-21 17:23 10981,状态模式允许一个"对象"在其内部状态改 ... -
模板模式
2011-02-21 17:23 1097模板方法(Template Method)模式是GOF设计模式 ... -
备忘录模式 (下)
2011-02-21 17:22 2101一、什么是备忘录模式 Memento模式也叫备忘录模式 ... -
备忘录
2011-02-21 17:22 1033备忘录(Memento Pattern)模式 备忘录模式又叫 ... -
原型模式Prototype(深拷贝)
2011-02-21 17:21 18321、定义:原型模式就是 ... -
原型模式
2011-02-21 17:21 1067原型模式(Prototype Patter ... -
抽象工厂模式
2011-02-21 17:20 1299假如你要制作一个对话框控件,你希望这个对话框可以有不同的Loo ... -
生成器模式
2011-02-21 17:19 1063实际上,既然Builder和Factory同属创建型模式,那么 ... -
构造者模式
2011-02-21 17:19 1109多种设计模式能够解决 ... -
亨元模式
2011-02-21 17:18 1096翻译为亨元模式,或直译为轻量级模式。所谓亨元,就是被其它对象共 ... -
责任链模式
2011-02-21 17:18 6629责任链模式(Chain of Resp ... -
代理模式
2011-02-21 17:17 822代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引 ... -
观察者模式
2011-02-21 17:17 993size=9] 论坛上很多人都讲设计模式,也讲了很多设计模式, ... -
多线程下的单例模式(上)
2011-02-21 17:07 1047Abstract 在开发中,如果某个实例的 ...
相关推荐
介绍的是工厂模式 包括简单工厂模式、工厂方法模式、抽象工厂模式 包括PPT和代码
java设计模式 工厂方法模式uml类图,一张图就让你秒懂工厂方法模式
工厂方法模式工厂方法模式工厂方法模式工厂方法模式工厂方法模式
工厂方法模式和抽象工厂模式的区别,对工厂方法模式和抽象工厂模式做了简单的比较
在简单工厂模式中,所有的产品都是由同一个工厂创建,工厂类职责较重,业务逻辑较为复杂,具体产品与工厂类之间的耦合度高,严重影响了系统的灵活性和扩展性,而工厂方法模式则可以很好地解决这一问题。
设计一个程序来读取多种不同存储格式的图片,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF格式图片读取器(GifReader)用于读取...请使用工厂方法模式实现该程序的设计,并使用UML画出该模式的类图。
工厂方法模式的C语言实现。改写自http://blog.csdn.net/sx_wpc/article/details/7645062一文的代码。
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
设计模式,工厂方法模式源文件,基本源代码
工厂方法模式Demo
java工厂方法模式 java工厂方法模式java工厂方法模式java工厂方法模式java工厂方法模式java工厂方法模式
工厂方法模式[C#]工厂方法模式[C#]
工厂方法模式,主要是利用反射机制获取配置文件的信息,用户可以在不知道如何生产对象的情况下获取对象。包括源代码和文档(文档在本博客的文档说明中)。
IOS 工厂方法模式代码Demo IOS 工厂 方法 模式 设计
设计模式 c# 工厂方法模式
用工厂方法模式重构简易计算器。界面要求:模仿windows操作系统附件中的计算器样式进行设计,要设计基本的菜单项(快捷键、热键、和分割线等)。功能要求:实现基本计算功能
初学者适用,工厂方法模式的Java示例程序,已打包为VS2005的J#工程。
工厂方法模式和简单工厂模式在结构上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来,从而...
这个是http://blog.csdn.net/dawanganban/article/details/9877593博客中java设计模式的源代码。下载前请先看《设计模式——工厂方法模式》一文。
本文章通俗易懂的对工厂模式进行了讲解,相信您看完这篇文章会对工厂模式有更深入的了解