A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© WakeUp 中级黑马   /  2014-11-3 22:59  /  1734 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 WakeUp 于 2014-11-5 20:08 编辑

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

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

12 个回复

倒序浏览
请看张孝祥老师的JavaBean中内容,我想在论坛中也没人能比张老师讲的更清楚了。。。
回复 使用道具 举报
可以买本《大话设计模式》讲得不错,不过是C#版的,想看Java的可以买《headfirst设计模式》。不过只看书理解的不深,还是用了之后才能更好地理解。
回复 使用道具 举报
本帖最后由 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>
复制代码

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


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上的很有见解
回复 使用道具 举报
feng_0207 发表于 2014-11-3 23:39
讲工厂设计模式也讲不过各位老师的视频给你简单说一下以前用到过的一些东西和用的时候的想法吧。
工厂,顾 ...

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

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

这个视频是张孝祥老师讲的高新技术本分里的。我这也没有视频了。你去官网看看吧,原来入学要考,现在不考了。
回复 使用道具 举报
姜浩 发表于 2014-11-4 10:41
这个视频是张孝祥老师讲的高新技术本分里的。我这也没有视频了。你去官网看看吧,原来入学要考,现在不考 ...

好吧。谢谢分享。
回复 使用道具 举报
看看评价也有收获
回复 使用道具 举报
老师的视频里面的有吧,可以看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马