1 工厂方法模式简单介绍

工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic
Factory),在这样的模式中,核心工厂不再是一个详细的类。而是一个抽象工厂,提供详细工厂实现的接口,详细创建产品交由子工厂去做,抽象工厂不涉及不论什么产品被实例化的细节。

而不同等级的产品。就相应一个不同等级的工厂,例如以下图。

图1

1.1工厂方法模式(多态性工厂模式):

工厂方法模式有四个角色: 1. 抽象产品接口 2. 详细产品类 3. 抽象工厂接口 4.详细工厂类。

1.2工厂方法的实现(建一个factroyMethod包,全部程序都放在该包下):

(1)首先建一个抽象产品接口(Computer.java)。

package factroyMethod;
public interface Computer {
public void run();
}

(2)建两个详细产品类(Dell.java、Lenovo.java)。须要实现Computer接口。

package factroyMethod;
public class Dell implements Computer {
public void run() {
System.out.println("戴尔电脑执行了");
}
} package factroyMethod;
public class Lenovo implements Computer {
public void run() {
System.out.println("联想电脑执行了");
}
}

(3)建一个抽象工厂接口(ComputerFactory.java)。

package factroyMethod;
public interface ComputerFactory {
public Computer makeComputer();
}

(4)建两个个详细工厂类(DellComputerFactory.java、LenovoComputerFactory.java)。

package factroyMethod;
public class DellComputerFactory implements ComputerFactory {
public Computer makeComputer(){
return new Dell();
}
}
package factroyMethod;
public class LenovoComputerFactory implements ComputerFactory {
public Computer makeComputer(){
return new Lenovo();
}
}

(5)建一个client程序(TestFactroyMethod.java)測试。

package factroyMethod;
public class TestFactroyMethod {
public static void main(String []args)throws Exception{
ComputerFactory computerFactory=
new DellComputerFactory();
Computer computer= computerFactory.makeComputer();
computer.run();
}
}

执行输出:

戴尔电脑执行了

从输出能够看出,依据须要生成的详细产品。调用相应的子工厂。即使产品添加了种类,仅仅要实现相应的工厂。而不须要改动工厂的源码,工厂的登记相应着产品的等级,改进了简单工厂模式的缺点。

(7)最后,我们再看一下工厂方法模式的UML图。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWluaWRydXBhbA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

图1.1 工厂方法模式

推荐文章:

浅析JAVA设计模式之工厂模式(一)

http://blog.csdn.net/minidrupal/article/details/38323341

Author: Vicky

Introduction: 教育工作者

Sign: 前事不忘。后事之师

最新文章

  1. SparkMLlib之 logistic regression源码分析
  2. 一段关于测试和自定义Attribute的代码
  3. jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示
  4. aop测试jdk代理机制
  5. How to create an anonymous IDA PRO database (.IDB)
  6. 关于vp8,vp8与264比较总结
  7. 团队项目--“我爱淘”校园二手书店 NABC分析
  8. Linux 操作命令列表记录
  9. Git环境搭建以及上传到GitHub全文记录
  10. SQL Server 页面查询超时(SOS_SCHEDULER_YIELD等待)
  11. ●CodeForces 518D Ilya and Escalator
  12. 出现error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
  13. asp.net core 2.0发布到IIS流程及报错解决方案
  14. IOS 下载app
  15. ubuntu16.04安装kinetic调用gazebo_control解决方案
  16. 实验一Java开发环境的熟悉-3
  17. 计算概论(A)/基础编程练习2(8题)/7:整数的个数
  18. SOA解决方案Dubbo学习入门
  19. Python并发编程系列之协程
  20. RMQ之ST求区间最大值

热门文章

  1. Bootstrap警告
  2. 多线程的join和interrupt
  3. Android Activity组件的启动过程
  4. Cocos2D-x设计模式发掘之中的一个:单例模式
  5. iOS 常见面试图总结2
  6. html5开发手机打电话发短信功能,html5的高级开发,html5开发大全,html手机电话短信功能具体解释
  7. 51NOD 1686 第K大区间 二分
  8. Linux平台Oracle多个实例启动
  9. (转)IOS http请求的get 和 post的请求的区别
  10. Android和Html的简单交互