`
ldjsyl
  • 浏览: 195455 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

设计模式-工厂方法

阅读更多
1.概念
《设计模式》一书中对于工厂方法模式是这样定义的:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 看过定义后可能有点费解,下面我们举个例子看看吧!

2.简单工厂模式
先简单说下简单工厂模式,简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。它又称为静态工厂方法模式。缺点是违反了开闭原则。
//生产产品的工厂类 
public class ProductFactory{   
  public static Product generateProduct(int which){ 
  //这个方法是static的  
    if (which==1)     
      return new ProductA();   
    else if (which==2)     
      return new ProductB();   
  } 
} 
//抽象产品 
public interface Product { ..... } 
//具体产品A 
public ProductA implement Product { 
  ProductA () {} 
} 
//具体产品B 
public ProductB implement Product { 
  ProductB () {} 
} 
//调用工厂方法 
public Client { 
  public method1() { 
    ProductFactory.generateProduct(1); 
  } 
} 


interface a{} 
class b implements a{}; 
class c implements a{}; 
工厂类 
public class factory{ 
  public static a createa(string name){ 
    class cls=class.forname(name);
    object obj=cls.getinstance(); 
    return (a)obj; 
  } 
} 
//创建实例时 
a b=factory.createa("b"); 
a c=factory.createa("c");


3.工厂方法
简单工厂模式,如果有新的产品生产,那么就要修改工程类一适应新的需求。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。   
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。  
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。  
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
//产品 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 ...");  
  } 
} 
// 抽象工厂方法 
public interface AbstractFactory {  
  public Plant createPlant(); 
} 
//具体工厂方法 
public class FactoryA implements AbstractFactory {  
  public Plant createPlant() {   
    return new PlantA();  
  } 
} 
public class FactoryB implements AbstractFactory {  
  public Plant createPlant() {   
    return new PlantB();  
  } 
} 
//调用工厂方法 
public Client { 
  public method1() {
    AbstractFactory instanceA = new FactoryA(); 
    instanceA.createPlant();
    AbstractFactory instanceB = new FactoryB(); 
    instanceB.createPlant();
  } 
}


why? 为什么要使用工厂方法呢?我们需要产品的时候,完全可以用new生产产品啊?因为我们要针对接口编程,使用了工厂方法,对于客户client来说,就可以简单的获得产品而不需要清楚如何生产产品,那是工厂类负责的。以上代码说明了工厂结合多态的用法。可以看出可以通过工厂方法返回的对象类型是一个抽象的类型AbstractFactory,而实际的对象是具体的一个子类FactoryA。这样调用者不必关心对象创建的细节,而且增加了程序的可扩展性。如上面的例子里如果在加入一个新的子类FactoryC时:class FactoryC implements AbstractFactory{};,调用时只需要:AbstractFactory c=new FactoryC();。如果把子类的名称放在配置文件里就可以轻松的实现子类的“可配置”了,这样就符合面向对象设计原则中的"开-闭"原则。

4.简单工厂和工厂方法的区别
(1)、工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
(2)、当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
3
2
分享到:
评论
1 楼 zhongxinhu 2012-05-02  
写的不错!

相关推荐

    c++设计模式-工厂方法模式

    工厂方法模式是面向对象设计模式中的一个创建型模式,它提供了一种封装对象创建过程的方式,使得具体的对象创建过程可以延迟到子类中进行。在C++编程中,工厂方法模式广泛应用于各种软件设计中,因为它能有效地解耦...

    设计模式-工厂方法模式视频

    工厂方法模式是面向对象设计中的一种经典设计模式,属于创建型模式。在软件工程中,当我们需要创建一系列相关或相互依赖的对象时,而不希望指定具体的类,工厂方法模式提供了一个很好的解决方案。 工厂方法模式的...

    设计模式-工厂方法代码

    在给定的“设计模式-工厂方法代码”文件中,我们可以深入探讨工厂方法这一特定的设计模式,以及它在Java编程中的应用。 工厂方法(Factory Method)是创建型设计模式之一,属于行为模式。它的主要作用是定义一个...

    Java设计模式-工厂方法

    工厂方法作为其中一种创建型设计模式,是Java程序员必须掌握的核心技能之一。这个模式的主要目标是提供一个接口来创建对象,但允许子类决定实例化哪一个类。这样,工厂方法将一个类的实例化延迟到了子类,使得代码更...

    设计模式-工厂方法模式

    工厂方法模式是设计模式中的经典之作,它通过封装创建细节,使得系统的对象创建更加灵活和可扩展。结合反射机制和配置文件的使用,这种模式能够更加动态地适应变化的需求,而无需修改现有的代码结构。在实际开发过程...

    iOS设计模式-工厂方法

    **工厂方法设计模式** 在iOS开发中,设计模式是一种被广泛采用的最佳实践,它提供了一种在不指定具体实现的情况下创建对象的方式。工厂方法(Factory Method)是面向对象设计模式中的一种,属于创建型模式。它定义...

    设计模式-工厂方法模式(C#)

    设计一个程序来读取多种不同存储格式的图片,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF格式图片读取器(GifReader)用于读取...请使用工厂方法模式实现该程序的设计,并使用UML画出该模式的类图。

    设计模式-工厂方法模式(讲解及其实现代码)

    工厂方法模式是设计模式中的一种创建型模式,它在软件工程中扮演着非常重要的角色。这个模式的主要目的是提供一个创建对象的接口,但允许子类决定实例化哪一个类。这样,工厂方法模式使得一个类的实例化延迟到了其...

    NET设计模式--工厂方法例子源码

    NET设计模式--工厂方法例子源码

    我讲设计模式--工厂方法

    "工厂方法"(Factory Method)是面向对象设计中的一种经典设计模式,它属于创建型模式,其主要目的是为了抽象产品的创建过程,使得具体的创建过程与使用产品的代码解耦。这个模式在《设计模式:可复用面向对象软件的...

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

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

    创建型设计模式---工厂设计模式实现

    创建型设计模式---工厂设计模式实现

    2.java设计模式-创建者模式-工厂方法模式.pdf

    java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是工厂方法模式及应用场景和应用场景的代码事例。及各工厂模式的区别。

    JAVA-设计模式-创建型模式-工厂模式

    JAVA-设计模式-创建型模式-工厂模式

    java设计模式-工厂模式

    Java设计模式中的工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时,它不会直接创建,而是调用一个工厂对象来完成创建工作。这种模式的核心在于封装了对象...

    c#设计模式-工厂模式

    《C#设计模式——工厂模式详解》 工厂模式是一种常用的设计模式,它的主要目的是通过抽象出产品创建过程,使得客户端代码不再直接new对象,而是通过工厂来获取对象,从而降低了代码之间的耦合度,提高了系统的可...

    设计模式之-工厂方法-FactoryMethod

    《设计模式之——工厂方法(Factory Method)》 在软件工程中,设计模式是一种解决常见问题的可重用解决方案,它被广泛应用于构建高质量、可维护的代码。工厂方法是面向对象设计模式的一种,属于创建型模式。这个...

    C#设计模式-工厂模式系列

    C#设计模式-工厂模式系列

    设计模式-工厂模式

    工厂模式是设计模式中的一个基础且重要的部分,它属于创建型设计模式,主要用于封装对象的创建过程,使得客户端不必关心具体的实现细节,提高了代码的可扩展性和可维护性。 工厂模式主要有三种形式:简单工厂模式、...

Global site tag (gtag.js) - Google Analytics