`
Diversity
  • 浏览: 3811 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

工厂方法模式和抽象工厂模式

阅读更多
工厂模式是:定义一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到子类。
它有个特点,就是通常工厂的类层次与产品的类层次几乎是一样的树。如果说工厂是你的影子,你就是产品了。在你平时未用到模式的时候,你需要什么就new一个,这种情况就好比你躺在地上,人影合一了。那什么时候需要工厂模式呢。看看定义:“使一个类的实例化延迟到子类”,这个是关键,当你有必要延迟实例化的时候才需要用工厂模式。那什么情况下要延迟呢,在单例模式中有惰性单例(就是单例那个静态属性)……等等,就是一开始你还不适合立刻就创建该对象,你还需要一些资源或其它准备工作。整个系统的运行不像单个程序那样,系统需要很多资源和多方面的协同工作。

抽象工厂是:提供一个创建一系列相关或相互依赖对象的接口,而无虚指定他们的具体类。
抽象工厂比工厂模式复杂的多。如果楼主说他们像可能是他们都叫工厂,都生成产品,都是接口型设计模式。但是我觉得他们是两个不同的设计模式。首先他们的目的是不同的。工厂是为了“延迟创建”,而抽象工厂是提供一系列的接口,是为了组织创建对象的灵活性,避免重复,避免耦合低内聚。
设计模式本身语言晦涩难懂,这个抽象工厂我也是没次都看着头昏眼花^_^,举个运用他的场景:
1。你有两台单色打印机,一台黑白墨的,一台彩墨的。
2。你有两种文件要打,一种讲演搞,一种图片

3。要求是讲演稿如果是有图就打黑白的,没图打彩色的,照片有字的就打黑白的,没字就打彩色的。

class Print{   
……   
    void doTalk(){   
       if(flag)   
           //color            1   
       else  
           //non-color        2   
   }   
  
   void doPicture(){   
       if(flag)   
          //color             3   
       else  
          //non-color         4   
   }   
……   
}  

class Print{
……
    void doTalk(){
       if(flag)
           //color            1
       else
           //non-color        2
   }

   void doPicture(){
       if(flag)
          //color             3
       else
          //non-color         4
   }
……
}



上面的这个场景就是可以运用抽象工厂来重构的。

public abstract class AbsFactory{ 
    abstract TalkPrint getTalkPrint(); //打讲演稿 
    abatract PicPrint getPicPrint();   //打图片的 
} 

public class ColorFactory extends AbsFactory{ 
    TalkPrint getTalkPrint(){ 
       //彩色讲演稿打印 
    } 

    PicPrint getPicPrint(){ 
       //彩色图片打印 
    } 
} 

public class NonColorFactory extends AbsFactory{ 
    TalkPrint getTalkPrint(){ 
         //黑白讲演稿打印 
    } 

    PicPrint getPicPrint(){ 
         //黑白图片打印 
    }  
} 

public abstract class TalkPrint{ 
   //抽象的讲演稿打印 
} 

public class colorTalkPrint extends TalkPrint{ 
   //彩色讲演稿打印 
} 

public class noncolorTalkPrint extends TalkPrint{ 
   //黑白讲演稿打印 
} 

public abstract class PicPrint{ 
   //抽象的图片打印 
} 


public class colorPicPrint extends PicPrint{ 
   //彩色图片打印 


}

public class noncolorPicPrint extends PicPrint{
   //黑白图片打印
}


进一步解释这个场景,就是当你做相似的工作又多种选择的时候,可以考虑用抽象工厂。

这里你要打印各种文件是一组相似的工作,打印有彩色、黑白等针对打印的不同要求。


这里仅仅举了一个方面的例子。

我们可以看出,虽然抽象工厂和工厂在代码形式上很相似,甚至抽象工作可以有工厂来拓展,但是他们的出发点是不一样的。

在搞单例模式的时候我们针对多线程拓展了为“双重检查模式”,那是同一个场景同一个任务,跟这里是不一样的。
分享到:
评论

相关推荐

    工厂方法模式和抽象工厂模式的区别

    工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...

    java工厂方法模式和抽象工厂模式实例

    根据描述,我们将深入探讨Java中的两种工厂模式:工厂方法模式和抽象工厂模式,并通过实例来理解它们的工作原理。 首先,我们来看**工厂方法模式**。这种模式定义了一个用于创建对象的接口,但让子类决定实例化哪一...

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    工厂方法模式和抽象工厂模式.zip

    在软件设计模式中,工厂方法模式和抽象工厂模式是两种常用的创建型模式,它们都用于对象的创建,但各有特点和适用场景。本篇将详细阐述这两种模式的概念、结构、工作原理以及它们的区别。 首先,我们来看工厂方法...

    简单工厂-工厂方法-抽象工厂 对比总结

    **抽象工厂模式** 是工厂方法模式的进一步抽象和推广,它关注的是整个一族相关或相互依赖的对象。抽象工厂提供了一组接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。这个模式适用于当系统需要...

    C#编程模式之工厂方法模式+抽象工厂模式

    本资源主要介绍工厂方法模式和抽象工厂模式。二者都与工厂相关,,但是其本质又大相径庭。这里先来简单介绍下二者的区别,以免混淆。 抽象工厂模式:提供一个接口,用于创建一系列相关的对象,而无需指定具体的类。...

    Java工厂模式:简单工厂、工厂方法模式、抽象工厂模式代码示例

    在Java中,工厂模式分为三种:简单工厂、工厂方法模式和抽象工厂模式。 **简单工厂模式** 是最基本的工厂模式,它由一个工厂类根据传入的参数决定创建哪一种产品类的实例。简单工厂容易实现,但违反开闭原则,即...

    深入了解工厂模式&工厂方法&抽象工厂

    工厂模式分为三种主要形态:简单工厂模式、工厂方法模式和抽象工厂模式。 1. 简单工厂模式:也称为静态工厂方法模式,它通过一个静态方法来创建对象。在这个例子中,`FruitGardener` 类就是简单工厂,它根据输入的...

    52-简单工厂工厂方法模式抽象工厂1

    在软件设计模式中,工厂方法模式和抽象工厂模式是两种常用的创建型模式,它们都用于对象的创建,但各有特点和适用场景。首先,我们来理解这两种模式的基本概念。 **简单工厂模式**: 简单工厂模式是一种较为初级的...

    Java设计模式编程中的工厂方法模式和抽象工厂模式

    在Java设计模式编程中,工厂方法模式和抽象工厂模式是两种重要的创建型设计模式,它们主要解决了对象创建过程中的灵活性和可扩展性问题。 工厂方法模式的核心思想是将对象的实例化过程延迟到子类中进行,从而实现对...

    抽象工厂模式+工厂方法模式+策略模式+类图实现手机加工厂

    本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...

    模式编程之- 简单工厂模式,工厂方式模式、抽象工厂模式

    简单工厂模式、工厂方法模式和抽象工厂模式是设计模式中三种常见的工厂模式,它们都是用于对象创建的,目的是为了将对象的创建过程封装起来,从而提高代码的灵活性和可维护性。 **简单工厂模式** 是最基础的工厂...

    简单工厂模式与工厂模式和抽象工厂模式.rar

    在软件设计模式中,工厂模式是一组非常基础且重要的设计思想,它们主要用来解决对象...在“简单工厂模式与工厂模式和抽象工厂模式.pdf”文件中,应该会有详细的理论介绍和案例解析,帮助读者更好地理解和应用这些模式。

    设计模式(简单工厂,工厂,抽象工厂)简单例子.rar

    本篇文章将深入探讨三种创建型设计模式:简单工厂模式、工厂方法模式和抽象工厂模式,通过生动的比喻以及实际应用的例子,揭示它们各自的特点和应用场景。 首先,我们从简单工厂模式开始。简单工厂模式是一种创建型...

    c# 工厂模式 抽象工厂模式

    在C#中,工厂模式可以分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。每一种模式都有其特定的应用场景和优势,旨在解决类的实例化过程中的灵活性和可扩展性问题。 1. **简单工厂模式(Simple ...

    [原创][创建型模式] 简单工厂、工厂方法、抽象工厂三种设计模式的理解

    NULL 博文链接:https://jacky-dai.iteye.com/blog/2296369

    简单工厂模式,工厂方法模式,抽象工厂模式

    本文将深入探讨三种工厂模式:简单工厂模式、工厂方法模式以及抽象工厂模式,并结合源码分析其应用场景和优缺点。 1. 简单工厂模式 简单工厂模式(Simple Factory Pattern)是一种静态工厂方法,它通过一个公共的...

    简单工厂模式,工厂方法模式,抽象工厂模式和Proxy模式

    从简单工厂,到工厂方法到抽象工厂,这几种都带有“工厂”的模式,总是容易叫人迷糊,我仔细研究了下,然后用简单的例子做类比,列出了自己的通俗理解和比较,大部分是自己的体会,感觉理的比较清楚,末尾提了下...

Global site tag (gtag.js) - Google Analytics