黑马程序员技术交流社区

标题: 什么是工厂设计模式? [打印本页]

作者: WakeUp    时间: 2014-11-3 22:59
标题: 什么是工厂设计模式?
本帖最后由 WakeUp 于 2014-11-5 20:08 编辑

什么是工厂设计模式?怎么使用?

作者: 姜浩    时间: 2014-11-3 23:01
请看张孝祥老师的JavaBean中内容,我想在论坛中也没人能比张老师讲的更清楚了。。。
作者: huoxy    时间: 2014-11-3 23:05
可以买本《大话设计模式》讲得不错,不过是C#版的,想看Java的可以买《headfirst设计模式》。不过只看书理解的不深,还是用了之后才能更好地理解。
作者: feng_0207    时间: 2014-11-3 23:39
本帖最后由 feng_0207 于 2014-11-3 23:44 编辑

讲工厂设计模式也讲不过各位老师的视频给你简单说一下以前用到过的一些东西和用的时候的想法吧。
工厂,顾名思义,他就是一个流水线,负责产生某样东西,根据进来的东西不同,它产生不同的东西。
在java实际开发中 通常会遇到这种情况,就是一个接口,有多个实现,完成不同的功能。
当我们不用工厂模式的时候  我们是这样写:
InterfaceName  iName = new implementatClass()
这样写的前提是你知道这个实现类什么名字。
使用工厂模式,就是你不需要知道这个实现类具体什么名字,只需要告诉工厂想产生一个什么样的实现类,只需要给工厂一个类型。
使用工厂模式,  不想敲汉字了 给你拷贝别处的代码吧。
接口:
  1. public interface IProduct {
  2.         public void creatProduct();

  3. }
复制代码
多个实现类:
  1. public class ProductAirCondition implements IProduct {

  2.         @Override
  3.         public void creatProduct() {
  4.                 // TODO Auto-generated method stub
  5.                 System.out.println("空调");
  6.         }

  7. }
  8. public class ProductIcebox implements IProduct {

  9.         @Override
  10.         public void creatProduct() {
  11.                 // TODO Auto-generated method stub
  12.                 System.out.println("电冰箱");
  13.         }

  14. }
  15. public class ProductWasher implements IProduct {

  16.         @Override
  17.         public void creatProduct() {
  18.                 // TODO Auto-generated method stub
  19.                 System.out.println("洗衣机");

  20.         }

  21. }
复制代码

最主要的  工厂:
  1. public static Product factory(String productName) throws Exception{
  2.         if(productName.equals("Washer")){
  3.             return new ProductWasher ();
  4.         }else if(productName.equals("Icebox")){
  5.             return new ProductIcebox ();
  6.         }else if(productName.equals("AirCondition")){
  7.             return new <span style="line-height: 2.2em;">ProductAirCondition</span><span style="line-height: 2.2em;"> </span><span style="line-height: 2.2em;"> </span><span style="line-height: 2.2em;">(); </span>
复制代码

这个工厂类 还有简化的方法  不过忘记了。
说的很乱。希望对你有帮助



作者: 戏言丶    时间: 2014-11-4 00:51
楼上的很有见解
作者: 郑飞    时间: 2014-11-4 01:03
feng_0207 发表于 2014-11-3 23:39
讲工厂设计模式也讲不过各位老师的视频给你简单说一下以前用到过的一些东西和用的时候的想法吧。
工厂,顾 ...

没用过 不过你说的简化 看代码逻辑 好像用接口的匿名内部类可以实现啊 省去中间那几个类 写到下面的工厂中去
作者: 韶山    时间: 2014-11-4 02:22
姜浩 发表于 2014-11-3 23:01
请看张孝祥老师的JavaBean中内容,我想在论坛中也没人能比张老师讲的更清楚了。。。 ...

可以分享下这套视频吗?新人求助
作者: Kikyou2014    时间: 2014-11-4 09:11
原来是这么回事
作者: ComeOn你好    时间: 2014-11-4 09:20
比如你创建了一个类A,你要用它就要new一个,但是如果用工厂模式,你就可以再添加一个工厂类,工厂类里面有个方法是new类A的,所以你需要类A的时候只需new一个工厂类,通过调用工厂类的方法来new出类A
作者: 姜浩    时间: 2014-11-4 10:41
韶山 发表于 2014-11-4 02:22
可以分享下这套视频吗?新人求助

这个视频是张孝祥老师讲的高新技术本分里的。我这也没有视频了。你去官网看看吧,原来入学要考,现在不考了。
作者: 韶山    时间: 2014-11-6 00:09
姜浩 发表于 2014-11-4 10:41
这个视频是张孝祥老师讲的高新技术本分里的。我这也没有视频了。你去官网看看吧,原来入学要考,现在不考 ...

好吧。谢谢分享。
作者: 高昌德    时间: 2014-11-6 07:03
看看评价也有收获
作者: 想成为黑马    时间: 2014-11-6 13:04
老师的视频里面的有吧,可以看看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2