`

简单、抽象工厂模式

阅读更多

简单工厂模式

1. 目的 
        工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。
2 . 简单工厂模式的结构 
 http://zhupan.iteye.com/upload/picture/pic/2305/0e1d5f00-1c49-4e5f-9c2c-986d989217bd.gif

3. 一个简单例子
java 代码
  1. // 产品接口         
  2. public   interface  Product {   
  3.   
  4.      public   void  getName();   
  5.   
  6. }   
  7.   
  8. // 具体产品A   
  9. public   class  ProductA  implements  Product {   
  10.   
  11.      public   void  getName() {   
  12.         System.out.println( "  I am ProductA  " );   
  13.     }   
  14.   
  15. }   
  16.   
  17. // 具体产品B   
  18. public   class  ProductB  implements  Product {   
  19.   
  20.      public   void  getName() {   
  21.         System.out.println( "  I am ProductB  " );   
  22.     }   
  23.   
  24. }   
  25.   
  26. // 工厂类   
  27. public   class  ProductCreator {   
  28.   
  29.      public  Product createProduct(String type) {   
  30.          if  ( " A " .equals(type)) {   
  31.              return   new  ProductA();   
  32.         }   
  33.          if  ( " B " .equals(type)) {   
  34.              return   new  ProductB();   
  35.         }  else   
  36.              return   null ;   
  37.     }   
  38.   
  39.      public   static   void  main(String[] args) {   
  40.         ProductCreator creator =  new  ProductCreator();   
  41.         creator.createProduct( " A " ).getName();   
  42.         creator.createProduct( " B " ).getName();   
  43.     }   
  44. }  
4. 小结工厂模式的适用范围
• 在编码时不能预见需要创建哪一种类的实例。
• 一个类使用它的子类来创建对象。
• 开发人员不希望创建了哪个类的实例以及如何创建实例的信息暴露给外部程序。  

 

抽象工厂模式 

1. 抽象工厂模式可以说是简单工厂模式的扩展,它们主要的区别在于需要创建对象的复杂程度上。
在抽象工厂模式中,抽象产品可能是一个或多个,从而构成一个或多个产品族。 在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式。
2. 抽象工厂模式的结构 

 http://zhupan.iteye.com/upload/picture/pic/2304/aa2dfa0b-cd37-4bfc-a411-dd75ee60ab5f.gif

3. 一个简单例子

java 代码
  1. //  产品 Plant接口         
  2. public   interface  Plant {   
  3. }   
  4.   
  5. // 具体产品PlantA,PlantB   
  6. public   class  PlantA  implements  Plant {   
  7.   
  8.      public  PlantA() {   
  9.         System.out.println( " create PlantA ! " );   
  10.     }   
  11.   
  12.      public   void  doSomething() {   
  13.         System.out.println( "  PlantA do something  " );   
  14.     }   
  15. }   
  16.   
  17. public   class  PlantB  implements  Plant {   
  18.      public  PlantB() {   
  19.         System.out.println( " create PlantB ! " );   
  20.     }   
  21.   
  22.      public   void  doSomething() {   
  23.         System.out.println( "  PlantB do something  " );   
  24.     }   
  25. }   
  26.   
  27. // 产品 Fruit接口   
  28. public   interface  Fruit {   
  29. }   
  30.   
  31. // 具体产品FruitA,FruitB   
  32. public   class  FruitA  implements  Fruit {   
  33.      public  FruitA() {   
  34.         System.out.println( " create FruitA ! " );   
  35.     }   
  36.   
  37.      public   void  doSomething() {   
  38.         System.out.println( "  FruitA do something  " );   
  39.     }   
  40. }   
  41.   
  42. public   class  FruitB  implements  Fruit {   
  43.      public  FruitB() {   
  44.         System.out.println( " create FruitB ! " );   
  45.     }   
  46.   
  47.      public   void  doSomething() {   
  48.         System.out.println( "  FruitB do something  " );   
  49.     }   
  50. }   
  51.   
  52. // 抽象工厂方法   
  53. public   interface  AbstractFactory {   
  54.      public  Plant createPlant();   
  55.   
  56.      public  Fruit createFruit();   
  57. }   
  58.   
  59. // 具体工厂方法   
  60. public   class  FactoryA  implements  AbstractFactory {   
  61.      public  Plant createPlant() {   
  62.          return   new  PlantA();   
  63.     }   
  64.   
  65.      public  Fruit createFruit() {   
  66.          return   new  FruitA();   
  67.     }   
  68. }   
  69.   
  70. public   class  FactoryB  implements  AbstractFactory {   
  71.      public  Plant createPlant() {   
  72.          return   new  PlantB();   
  73.     }   
  74.   
  75.      public  Fruit createFruit() {   
  76.          return   new  FruitB();   
  77.     }   
  78. }  
4. 小结
在以下情况下,应当考虑使用抽象工厂模式。
  首先,一个系统应当不依赖于产品类实例被创立,组成,和表示的细节。这对于所有形态的工厂模式都是重要的。
  其次,这个系统的产品有多于一个的产品族。
  第三,同属于同一个产品族的产品是设计成在一起使用的。这一约束必须得在系统的设计中体现出来。
  最后,不同的产品以一系列的接口的面貌出现,从而使系统不依赖于接口实现的细节。
  其中第二丶第三个条件是我们选用抽象工厂模式而非其它形态的工厂模式的关键性条件。
分享到:
评论

相关推荐

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

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

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

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

    抽象工厂模式+反射技术(抽象工厂模式+简单工厂模式)

    在某些情况下,我们可以将简单工厂作为抽象工厂的一个实现,或者在系统初期使用简单工厂,随着系统复杂性的增加逐步过渡到抽象工厂模式。 至于“仅仅是抽象工厂模式”,这意味着设计完全围绕着抽象工厂模式进行,...

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

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

    抽象工厂模式简单小例子

    ### 抽象工厂模式简介与应用实例 #### 一、抽象工厂模式定义 抽象工厂模式是一种创建型设计模式,它能够让我们从一个公共接口中创建一系列相关或相互依赖的对象,而无需指定它们的具体类。该模式的核心在于提供了...

    简单工厂模式、工厂模式、抽象工厂模式案例(C++实现)

    在这个压缩包中,包含了三种工厂模式的C++实现:简单工厂模式、工厂方法模式以及抽象工厂模式。让我们一一探讨这些模式。 1. 简单工厂模式: 简单工厂模式是一种静态工厂方法,它提供一个公共的工厂类来创建对象。...

    java设计模式-抽象工厂模式

    下面是一个简单的Java抽象工厂模式的示例: ```java // 抽象工厂接口 public interface WidgetFactory { Button createButton(); Label createLabel(); } // Windows具体工厂 public class WinWidgetFactory ...

    c#工厂模式——简单工厂,抽象工厂,单件模式实例

    抽象工厂模式则更进一步,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在多线程或者跨平台的C#应用中,抽象工厂可以帮助我们隔离产品族,使得更换产品族变得容易。例如,我们可以有...

    工厂模式(简单工厂,普通工厂,抽象工厂)代码java

    工厂模式分为三种主要类型:简单工厂模式、普通工厂模式(也称为工厂方法模式)和抽象工厂模式。 1. **简单工厂模式**: - 简单工厂模式中,有一个中心工厂类,它负责根据输入条件(通常是一个参数)来创建具体的...

    Android抽象工厂模式demo

    7. **适配器模式结合**:在某些情况下,抽象工厂模式可能与适配器模式结合,以便将不同设备的API封装成统一的接口,使得客户端可以更加简单地处理各种设备的差异。 8. **多态性**:抽象工厂模式充分利用了多态性,...

    抽象工厂模式实现计算器

    抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方法,而无需指定它们的具体类。在计算器的实现中,这个模式可以帮助我们构建不同类型的计算器,比如简单计算器、科学计算器等,而无需修改现有代码。 ...

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

    简单工厂模式适用于快速原型开发或小型项目,而工厂方法和抽象工厂模式则更适合大型项目或需要高度灵活性的系统。理解并熟练运用这些设计模式,能够提高代码的可维护性和可扩展性,也是成为一名专业IT从业者必备的...

    .NET 抽象工厂模式Demo

    在描述中提到的".NET 抽象工厂模式Demo"应该是一个简单的示例,用于演示如何在.NET环境中应用抽象工厂模式。这个示例可能包括以下部分: 1. **抽象工厂接口**:定义了创建一系列相关对象的方法,例如创建产品A和...

    反射+抽象工厂模式的简易实现

    总结起来,"反射+抽象工厂模式的简易实现"是为了在运行时动态适应不同的数据库环境,通过反射实现动态加载和使用适当的数据库连接工厂,同时抽象工厂模式保证了创建数据库连接的代码与使用这些连接的业务逻辑解耦。...

    抽象工厂设计模式简单实例

    在不指定具体类的情况下,抽象工厂模式允许客户端使用一组相关或相互依赖的对象。 首先,我们需要理解抽象工厂模式的核心组成部分: 1. 抽象工厂(Abstract Factory):这是模式的中心接口,定义了一系列用于创建...

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

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

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

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

    简单工厂模式、工厂模式、抽象工厂模式

    ### 简单工厂模式、工厂模式、抽象工厂模式 #### 一、引子 假设有一位暴发户,家里有两辆豪车——Benz和BMW,并雇用了司机为他服务。按照原始的设计思路,每当暴发户需要用车时,都需要明确告诉司机要开哪辆车。...

    设计模式——抽象工厂模式

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式的主要目的是为了隔离产品对象的创建和使用,使得系统对产品类的依赖降低到最低,同时也方便了产品的扩展和...

    java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】

    java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...

Global site tag (gtag.js) - Google Analytics