科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道HeadFirst采访“工厂方法”和“抽象工厂”

HeadFirst采访“工厂方法”和“抽象工厂”

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

第四章的后面有段HeadFirst采访工厂模式中的工厂方法模式及抽象工厂模式,感觉对理解这两种模式很有帮助,大概的翻译了采访内容跟大家分享下~~

作者:gaolin_bei 来源:CSDN 2008年2月27日

关键字: 工厂方法 java HeadFirst

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

<<Head First Design Pattern>>第四章的后面有段HeadFirst采访工厂模式中的工厂方法模式及抽象工厂模式,感觉对理解这两种模式很有帮助,大概的翻译了采访内容跟大家分享下~~

 HeadFirst:哇,马上就要采访工厂模式中的两位老大了,这是我们的第一次接触啊,我现在心情很激动啊。

 Factory Method:呃,你知道我自己是不太喜欢被你们把我和抽象工厂(Abstract Factory)混淆在一起。仅仅是因为我们都是工厂模式中的一员,所以把我们俩放在一起来采访吗,为什么不独自进行呢。

 HeadFirst:你先别生气嘛,我想一起采访你们,这样做的目的就是想要帮助那些读者们消除你们俩谁是谁的混淆啊。你们俩确实有相同之处,而且我也听说了人们有时候在使用工厂模式的时候,会把你们俩给混淆了。

 Abstract Factory:确实是这样啊,有时候我会被人们误认为是工厂方法(Factory Method),而且我知道工厂方法你也有类似的困惑。其实我们都很擅长让应用程序的高层模式在创建类的实例时无需依赖于这些类的具体实现。所以我能理解人们为什么有时会把我俩给混淆了。

 Factory Method:呃,也太过简单地说我了吧。毕竟,我是让类来负责创建对象的工作而你是使用一堆的对象;这就是咱俩最根本的区别啊。

 HeadFirst:等等,Factory Method您能不能对上面说的那个根本区别再深入解释下呢?

 Factory Method:当然可以。抽象工厂和我都是用来产生对象的,这是我们的天职。但是我是通过继承。。。

 Abstract Factory:。。。我是通过对象的组合。

 Factory Method:说得很对。所以这就意味着,你们如果想要通过我产生对象的话,就要通过继承一个抽象类型然后在子类里覆盖那个抽象类的factory method。

 HeadFirst:这factory method是干什么用的呢?

 Factory Method:当然是用来产生一个(请大家注意是一个,我想这也很关键)对象的。我的意思是说,工厂方法模式的一个最核心的地方就是你们利用一个子类,让它来决定如何完成一个具体对象的生成工作。通过这种方式,客户端(调用者所在的类)只需要知道这个对象的抽象类型,而子类呢才关心这个抽象类型的真正实现类。所以呢,换句话说,我能分离客户端和具体的实现类。

 Abstract Factory:我也能实现,只不过是我通过另外一种不同的方式罢了。

 HeadFirst:继续,Abstract Factory。。。为我们谈谈有关对象组合的情况吧?

 Abstract Factory:我提供了一个抽象类(通常来说是接口)来创建一个产品家族。这个抽象类的子类来定义这些产品是如何被生产的。为了使用这个工厂,你声明一个,然后再把一个子类通过参数传递,来对它赋值{也就是说,在一个客户端类里先声明一个抽象的工厂类,然后比如说可以在它的构造函数里留个参数是个抽象类型(抽象工厂类)的,在实例化这个客户端的时候把抽象工厂类的子类(也即是哪个产品族)传进来,从而在构造函数里完成对这个抽象类的实例化。}(在抽象类里的一组方法返回的都是抽象产品)所以呢,跟工厂方法一样,我也分离了客户端和它们要使用的究竟是哪种具体的产品。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章