`
kang
  • 浏览: 472540 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

创建模式之工厂模式factory

阅读更多

工厂模式的主要应用场合:


模块间调用时模块可选择的接口很多(可根据不同的情况进行不同的选择,程序的可扩充性比较强);

或者实例化一个对象时需要进行比较复杂的操作(不仅仅是普通的new一下,可能有准备或者收尾工作等)。

 

 

工厂模式的优缺点:


优点:客户类和工厂类分开。客户类任何时候需要某种产品,只需向工厂请求即可。客户类无须修改就可以接纳新产品。
缺点:当产品修改时,工厂类也要做相应的修改。如:产品如何创建及如何向客户端提供。

 

 

举例(摘自网络):

 

追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory。

 

<!----><!----> <!---->

 

1.没有使用工厂模式:

 

package com.javaeye.kang.factory;

 

/**

  * 传统 的做法

  * 不使用工厂模式

  * 直接在 Action new CustomerDao 象,耦合度高,可 充性低

  */

 

class Action {

      public void callDao() {

            CustomerDao customerDao = new CustomerDao();

            customerDao.login();

      }

}

 

class CustomerDao {

      public void login() {

            System. out .println( " " );

      }

}

 

public class FactoryTest {

 

      public static void main(String[] args) {

            Action action = new Action();

            action.callDao();

      }

}

 

测试结果:

 


2.使用工厂模式:

package com.javaeye.kang.factory;

 

/**

  * 使用工厂模式

  * 1. 面向接口

  * 2. 建立工厂

  */

 

class Action {

      public void callDao() {

          // 将字符串 CustomerDao dao 工厂,然后从中拿到 CustomerDao

          // 也可以根据情况 其他 dao 工厂中去,然后从中拿到其他的 对应对

          ICustomerDao iCustomerDao = DaoFactory.getDao ( "CustomerDao" );

          iCustomerDao.login();

      }

}

 

//dao 工厂

class DaoFactory {

      public static ICustomerDao getDao(String daoDame) {

            if ( "CustomerDao" .endsWith(daoDame)) {

                  // 先准 工作

                  return new CustomerDao();

            } else if ( ... ) {

                  Return ...

            }

            return null ;

      }

}

 

// 接口

interface ICustomerDao {

      public abstract void login();

}

 

// 实现 接口的具体

class CustomerDao implements ICustomerDao{

      public void login() {

            System. out .println( " " );

      }

}

 

public class FactoryTest {

 

      public static void main(String[] args) {

            Action action = new Action();

            action.callDao();

      }

}

 

 

 

3.对上一个工厂模式进行改进:

package com.javaeye.kang.factory;

 

/**

  * 上一个工厂模式 行改

  * 1. 大服 务对 象,将 ICustomerDao Object

  * 2. 利用 的反射机制

  */

 

class Action {

      public void callDao() {

          // 将字符串 CustomerDao dao 工厂,然后从中拿到 CustomerDao

            // 也可以根据情况 其他 dao 工厂中去,然后从中拿到其他的 对应对

            // 转换 (从 Object ICustomerDao

            ICustomerDao iCustomerDao = (ICustomerDao) DaoFactory.getDao ( "CustomerDao" );

            iCustomerDao.login();

      }

}

 

//dao 工厂

class DaoFactory {

      public static Object getDao(String daoDame) {

            // 先的准 工作

  // 从配置文件中 daoDame 对应 名。如果切 ,修改配置文件中 对应 名就可以了

            String className = ;

            // 利用 的反射机制

            return Class.forName(className).getInterfaces();

      }

}

// 配置文件,再 展下去就是 spring 了(通 配置文件将 象注入到程序中)

 

 

// 接口

interface ICustomerDao {

      public abstract void login();

}

 

// 实现 接口的具体

class CustomerDao implements ICustomerDao{

      public void login() {

            System. out .println( " " );

      }

}

 

public class FactoryTest {

 

      public static void main(String[] args) {

            Action action = new Action();

            action.callDao();

      }

 

  • 描述: 工厂模式
  • 大小: 95.3 KB
  • 描述: 工厂模式要点
  • 大小: 79.3 KB
  • 描述: 工厂模式小结
  • 大小: 131 KB
分享到:
评论

相关推荐

    [创建型模式] head first 设计模式之工厂模式(Factory)

    工厂方法(Factory Method)是工厂模式的一种具体实现,它是《Head First 设计模式》这本书中讲解的重点之一。在这个模式中,一个工厂类声明了一个创建对象的抽象方法,但并不实现这个方法。而是由子类决定要实例化...

    创建型模式之工厂方法模式(Factory Method Pattern)

    在简单工厂模式中,工厂类通常是静态的,负责创建所有类型的对象,这导致在添加新产品时,需要修改工厂类。而在工厂方法模式中,每种产品都有专门的工厂类负责创建,这样就不会有这种问题。 在实际开发中,工厂方法...

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

    工厂模式是一种常用的软件设计模式,它是创建型设计模式的一种,主要解决对象的创建问题,将对象的创建过程封装起来,使得创建过程独立于使用过程。这样可以提高代码的可复用性和灵活性,同时降低了系统的耦合度。...

    JAVA设计模式(01):创建型-工厂模式【简单工厂模式】(Simple Factory)

    **简单工厂模式**是软件设计模式中的一种,属于创建型模式。在Java编程中,它是一种用于创建对象的简便方法,将对象的实例化过程封装到一个单独的工厂类中,使得客户端代码无需直接调用具体类的构造函数,而是通过...

    创建型模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...

    工厂模式FactoryMode

    工厂模式是一种常用的面向对象设计模式,它属于创建型设计模式,旨在提供一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它不会直接创建,而是调用一个专门的工厂对象来完成这个任务。这样...

    设计模式之Factory

    本篇文章将详细探讨"设计模式之Factory",它是一种非常基础且重要的创建型设计模式。 Factory模式的核心思想是提供一个接口或者抽象类,用于创建某一类对象,但允许其子类决定实例化哪一个类。这种模式使得创建过程...

    创建型-抽象工厂模式(Abstract Factory)

    抽象工厂模式是设计模式中的一种,它属于对象创建型模式,主要解决的是当系统需要创建一组相关或相互依赖的对象时,而这些对象的类在运行时可能未知的问题。这种模式提供了一个接口,用于创建相关或依赖对象的家族,...

    Java设计模式之工厂模式(Factory)

    3. **抽象工厂模式(Abstract Factory)**:不仅关注单一类别的对象创建,还关注一系列相关对象的创建。 #### 二、工厂模式简介 工厂模式的主要目标是为创建对象提供一个统一的接口。这种模式的关键在于隐藏创建...

    走进设计模式之抽象工厂(Abstract Factory)

    1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...

    工厂方法模式(FactoryMethod)

    工厂方法模式是面向对象设计模式中的行为型模式之一,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个工厂类负责创建对象,而具体的创建过程被延迟到了子类中,使得子类可以在不修改原有代码的基础上决定...

    Factory Method 工厂方法模式(创建型模式).wmv

    Factory Method 工厂方法模式(创建型模式).wmv

    [创建型模式] 设计模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式的关键在于抽象工厂,它定义了一组创建对象的接口,允许子类决定实例化哪一个类。...

    设计模式之工厂方法模式

    工厂方法模式是设计模式中的创建型模式之一,它在软件工程中扮演着非常重要的角色,尤其是在C#这样的面向对象编程语言中。工厂方法模式提供了一种封装对象创建过程的方法,使得具体的创建过程延迟到子类中进行,从而...

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    抽象工厂模式是工厂方法模式的进一步扩展,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。这在处理不同平台或环境下的产品族时非常有用。在Java中,我们可以通过创建抽象工厂类和具体...

    设计模式 创建型模式 Abstract Factory模式(抽象工厂)

    Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...

    Head First 设计模式 (四) 工厂模式(factory pattern) C++实现

    1. **抽象工厂(Abstract Factory)**:这是工厂模式的核心接口,定义了创建产品对象的公共接口。在C++中,通常用抽象类或者纯虚函数接口来表示。 2. **具体工厂(Concrete Factory)**:实现了抽象工厂接口,负责...

    深入浅出设计模式之工厂模式

    工厂模式是一种常用的面向对象设计模式,属于创建型模式之一。它的主要目的是为了解决在软件开发过程中频繁创建对象的问题,并提供了一种更加灵活的方式来创建对象。 #### 1.2 特点 - **封装性**:通过将对象的创建...

Global site tag (gtag.js) - Google Analytics