`

理解工厂模式

 
阅读更多

简单工厂模式(转自http://www.iteye.com/topic/26455)

 

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

 

3. 一个简单例子
 
    // 产品接口         
    public interface Product {   
      
        public void getName();   
      
    }   
      
    // 具体产品A   
    public class ProductA implements Product {   
      
        public void getName() {   
            System.out.println("  I am ProductA  ");   
        }   
      
    }   
      
    // 具体产品B   
    public class ProductB implements Product {   
      
        public void getName() {   
            System.out.println("  I am ProductB  ");   
        }   
      
    }   
      
    // 工厂类   
    public class ProductCreator {   
      
        public Product createProduct(String type) {   
            if (" A ".equals(type)) {   
                return new ProductA();   
            }   
            if (" B ".equals(type)) {   
                return new ProductB();   
            } else  
                return null;   
        }   
      
        public static void main(String[] args) {   
            ProductCreator creator = new ProductCreator();   
            creator.createProduct(" A ").getName();   
            creator.createProduct(" B ").getName();   
        }   
    }   

 
4. 小结工厂模式的适用范围
• 在编码时不能预见需要创建哪一种类的实例。
• 一个类使用它的子类来创建对象。
• 开发人员不希望创建了哪个类的实例以及如何创建实例的信息暴露给外部程序。  

 

 

 

抽象工厂模式 

 

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

 

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

 

3. 一个简单例子

 

 

    //  产品 Plant接口         
    public interface Plant {   
    }   
      
    // 具体产品PlantA,PlantB   
    public class PlantA implements Plant {   
      
        public PlantA() {   
            System.out.println(" create PlantA ! ");   
        }   
      
        public void doSomething() {   
            System.out.println("  PlantA do something  ");   
        }   
    }   
      
    public class PlantB implements Plant {   
        public PlantB() {   
            System.out.println(" create PlantB ! ");   
        }   
      
        public void doSomething() {   
            System.out.println("  PlantB do something  ");   
        }   
    }   
      
    // 产品 Fruit接口   
    public interface Fruit {   
    }   
      
    // 具体产品FruitA,FruitB   
    public class FruitA implements Fruit {   
        public FruitA() {   
            System.out.println(" create FruitA ! ");   
        }   
      
        public void doSomething() {   
            System.out.println("  FruitA do something  ");   
        }   
    }   
      
    public class FruitB implements Fruit {   
        public FruitB() {   
            System.out.println(" create FruitB ! ");   
        }   
      
        public void doSomething() {   
            System.out.println("  FruitB do something  ");   
        }   
    }   
      
    // 抽象工厂方法   
    public interface AbstractFactory {   
        public Plant createPlant();   
      
        public Fruit createFruit();   
    }   
      
    // 具体工厂方法   
    public class FactoryA implements AbstractFactory {   
        public Plant createPlant() {   
            return new PlantA();   
        }   
      
        public Fruit createFruit() {   
            return new FruitA();   
        }   
    }   
      
    public class FactoryB implements AbstractFactory {   
        public Plant createPlant() {   
            return new PlantB();   
        }   
      
        public Fruit createFruit() {   
            return new FruitB();   
        }   
    }   

 

4. 小结
在以下情况下,应当考虑使用抽象工厂模式。
  首先,一个系统应当不依赖于产品类实例被创立,组成,和表示的细节。这对于所有形态的工厂模式都是重要的。
  其次,这个系统的产品有多于一个的产品族。
  第三,同属于同一个产品族的产品是设计成在一起使用的。这一约束必须得在系统的设计中体现出来。
  最后,不同的产品以一系列的接口的面貌出现,从而使系统不依赖于接口实现的细节。
  其中第二丶第三个条件是我们选用抽象工厂模式而非其它形态的工厂模式的关键性条件。

分享到:
评论

相关推荐

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

    工厂模式是一种常用的设计模式,主要用于在代码中创建对象。它将对象的创建过程封装起来,使得客户端无需关心具体的实现细节,只需通过工厂方法获取所需...理解和掌握这三种工厂模式对于进行高质量的软件设计至关重要。

    设计模式 工厂模式(附源码)

    通过阅读源码,你可以更好地理解工厂模式的运作方式,并在自己的项目中灵活应用。 学习设计模式,尤其是工厂模式,对于提升C#编程技能、理解和设计更高质量的软件系统至关重要。通过实践和理解这些模式,你将能够...

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

    在软件设计模式中,工厂模式是一种非常常用的行为型模式,它的主要目的是为了隔离对象的创建过程,使得客户端代码不直接创建对象,而是通过一个...阅读并理解这些代码有助于深入理解工厂模式及其在Java编程中的应用。

    工厂模式-设计模式

    首先,我们需要理解工厂模式的核心概念。工厂模式是一种创建型设计模式,它提供了一个创建对象的最佳接口,隐藏了对象的创建逻辑,让客户端代码无需关注具体对象的创建过程。通过使用工厂模式,我们可以将类的实例化...

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

    通过学习和理解这三种工厂模式,开发者可以更好地组织代码,降低模块间的耦合,提高软件的可维护性和可扩展性。在实际开发过程中,根据项目需求和产品结构选择合适的工厂模式,能够有效地提高代码质量。

    读40020072 朋友的\"工厂模式运用-锻造武器\"理解和感想

    标签中的“源码”可能意味着文章会包含实际的编程示例代码,帮助读者更好地理解工厂模式的工作原理。而“工具”可能是指工厂模式作为一个通用的设计工具,可以在各种软件开发项目中发挥作用。 由于没有具体的压缩包...

    工厂模式 经典实战案例 一看就能学会工厂模式

    工厂模式是一种设计模式,它是创建型模式的一种,主要用于解决对象创建的问题。在软件工程中,当我们需要创建一系列相关或...通过实践和理解工厂模式,程序员可以更好地处理复杂系统中的对象创建问题,提升代码质量。

    JAVA设计模式的工厂模式文档和代码

    在IT行业中,设计模式是软件开发中的重要概念,它们代表了在特定情境下解决常见问题...通过学习这些资料,开发者可以深入理解工厂模式的精髓,掌握如何在实际项目中有效地应用这一模式,提升代码的可维护性和可扩展性。

    工厂模式的三种写法

    这些代码可能包括了类的定义、实例化过程、以及如何调用工厂方法创建对象等关键部分,对于深入理解工厂模式的细节非常有帮助。 总的来说,工厂模式是软件设计中一个重要的工具,它能够帮助我们更好地管理对象的创建...

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

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

    优秀的设计模式示例-工厂模式

    在阅读和学习这个示例时,我们可以深入理解工厂模式的实现细节,观察它是如何在具体项目中发挥作用的,以及如何处理可能出现的复杂性和扩展性需求。同时,也可以借鉴其在实际开发中的最佳实践,提升我们的编程技巧和...

    工厂模式代码生成器

    工厂模式是一种常用的面向对象设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当我们需要创建...对这个项目的学习和研究,将有助于开发者深入理解工厂模式,提高编码效率,并提升软件的可维护性和可扩展性。

    工厂模式的具体例子,工厂模式的具体例子

    在这个具体的例子中,我们可以通过分析提供的文件名来深入理解工厂模式的应用。 首先,`DaoFactory.java` 暗示了一个数据库访问对象(DAO)的工厂。DAO模式是用来封装对数据库的操作,而工厂模式则是用来创建这些...

    工厂模式详细说明(带图超经典)

    .bmp文件可能是一个图片,展示了一些类图或用例图,帮助理解工厂模式的结构和关系。.vsd文件则是Visio绘制的文档,可能包含详细的流程图或UML图,进一步阐述了工厂模式的工作流程。 总结起来,工厂模式是一种重要的...

    java工厂模式经典学习书籍(很详细的)

    Java工厂模式是面向对象设计模式中的一个基础模式,它...通过对这个压缩包的学习,你可以深入理解工厂模式的精髓,提高自己的编程技艺。同时,结合实际项目实践,你将能够更好地将理论知识转化为解决实际问题的能力。

    实验四:工厂模式.rar

    实验四的实践将帮助我们更好地理解工厂模式在实际开发中的应用,以及如何利用它来提高代码的可维护性和可扩展性。通过编写和运行这些代码,我们可以看到如何在不同的场景下选择合适的工厂模式,并体会其带来的好处。...

    简单的工厂模式实现-java

    总的来说,"简单的工厂模式实现-java"资源提供了一个学习和理解工厂模式的实例。通过这个实例,我们可以了解到如何在Java中运用工厂模式来创建对象,以及如何利用这种模式提高代码的可读性和可维护性。在实际开发中...

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

    这些工厂模式的实现文件("工厂模式")可以作为学习和理解设计模式的实例。通过阅读和分析这些代码,你可以深入理解如何在C++中应用这些模式,以及它们在实际项目中的价值。此外,这些模式不仅限于C++,在Java、...

    工厂模式的测试并有spring ioc的简单实现

    通过理解和实践这些例子,我们可以深入理解工厂模式的精髓,以及Spring如何通过IoC实现组件的松耦合。同时,对于【abstactFactory】,我们可以期待看到如何在Spring环境中实现更复杂的对象族创建。测试这些代码时,...

    工厂模式源代码

    通过阅读这个文档,你可以深入理解工厂模式的原理,学习如何在实际项目中应用它来提高代码的可维护性和扩展性。 工厂模式的优缺点如下: 优点: 1. 封装性:客户端与具体产品对象的创建过程分离,提高了代码的可...

Global site tag (gtag.js) - Google Analytics