`

工厂模式:简单工厂

 
阅读更多

为什么要使用工厂模式?

先看一个例子:

 

Duck duck = new MallardDuck();//野鸭

 

 我们在实例化的时候,用的是具体类(new后面的是具体类)。绑定具体类会导致代码更脆弱,缺乏弹性。

当有一群相关类时,通常会写出这样的代码:

 

Duck duck;
if(picnic){
  duck = new MallardDuck();
}else if(hunting){
  duck = new DecoyDuck();
}else if(isBathTub){
  duck = new RubberDuck();
}

 

 一旦有扩展会变化,就必须重新打开这段代码进行检查和修改,容易犯错。

以上代码并非“对修改关闭”。想用新的具体类型来扩展代码时,必须重新打开修改它。

有一个重要的设计原则是“找出变化的部分,把它从不变的部分中分离出来”。

针对接口编程可以隔离掉以后系统可能发生的一大堆改变。

 

再看下面这个更详细的例子:比萨店

要生产一个比萨,必须先实例化它,然后还有一系列的流程,如:准备、烧烤、切片、包装。

 

Pizza orderPizza(){
  Pizza pizza = new Pizza();
  pizza.prepare();//准备
  pizza.bake();//烘烤
  pizza.cut();//切片
  pizza.box();//包装
  return pizza;
}

如果要加入其它类型的比萨,怎么做呢?先定义一个pizza接口,其它pizza类型实现这个接口。

 

Pizza orderPizza(String type){ 
  Pizza pizza ;
  if(type.equals("cheese")){
    pizza = new CheesePizza();
  }else if(type.equals("greek")){
    pizza = new GreekPizza();
  }else if(type.equals("pepperoni")){
    pizza = new PepperoniPizza();
  }
  pizza.prepare();//准备
  pizza.bake();//烘烤
  pizza.cut();//切片
  pizza.box();//包装
  return pizza;
}

上面这个方法中,当我们要增加或删除某种比萨类型,就必须要对其进行修改,所以其无法对修改关闭。

 

使用封装!

将上面这个方法中创建pizza的代码取出定义成一个类。

 

 

  public class SimplePizzaFactory(){
    public Pizza createPizza(String type){
    	Pizza pizza = null;
    	if(type.equals("cheese")){
      		pizza = new CheesePizza();
    	}else if(type.equals("greek")){
      		pizza = new GreekPizza();
    	}else if(type.equals("pepperoni")){
      		pizza = new PepperoniPizza();
    	}  
        return pizza;
    } 
  }

 

 重写PizzaStore类

 

public class PizzaStore{
  SimplePizzaFactory factory;
  public PizzaStore(SimplePizzaFactory factory){
     this.factory = factory;
  }
  public Pizza orderPizza(String type){
    Pizza pizza = factory.createPizza(type);
    pizza.prepare();
    pizza.bake();
    pizza.cut();
    pizza.box();
    return pizza;
  }
}

 

 

上面所写的例子只不过是个简单工厂,它其实算不上是一种设计模式,反而像一种编程习惯。

分享到:
评论

相关推荐

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

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

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

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

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

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

    C++ 设计模式:简单工厂、工厂方法、抽象工厂练习代码

    本主题聚焦于C++中的三个工厂模式:简单工厂、工厂方法和抽象工厂。这些模式都围绕着对象的创建过程,旨在提高代码的灵活性、可读性和可维护性。 1. **简单工厂模式**: - 简单工厂模式是一种静态工厂方法,它提供...

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

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

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

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

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

    本篇文章将对三种主要的工厂模式:简单工厂、工厂方法和抽象工厂进行深入的对比和总结。 **简单工厂模式** 是最基础的工厂模式形式,它提供一个静态方法或类来创建对象。在这个模式中,工厂是负责创建对象的中心...

    uml 文档 简单工厂模式

    UML文档-简单工厂模式 简单工厂模式是一种专门负责将大量有共同接口的类实例化的模式,而不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。 简单工厂模式的...

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

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

    设计模式之PHP项目应用(简单工厂模式:计算器)

    1)程序功能:用简单工厂模式实现计算器功能,采用PHP编写。 2)程序详解地址:http://blog.csdn.net/clevercode/article/details/45692995。 3)原创作品,出自"CleverCode的博客",分类为《设计模式之PHP项目应用...

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

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

    qt工厂模式例子qt简单工程模式源码

    6. 简单工厂模式 部分源码实例: // 奔驰工厂 class BenzFactory : public AFactory { public: ICar* CreateCar() { return new BenzCar(); } }; // 宝马工厂 class BmwFactory : public AFactory { public: ...

    设计模式UML图--工厂模式

    在给定的“设计模式UML图--工厂模式”中,我们关注的是三种不同的工厂模式:简单工厂、工厂方法和抽象工厂。这些模式都是创建型设计模式,它们的核心目标是为对象的创建提供一种抽象,使得客户端代码不必关心具体的...

    工厂模式:不修改工厂,只增删类对应修改配置文件就OK啦!

    在软件设计模式中,工厂模式是一种非常常见的创建型模式,它的主要目的是为了隔离对象的创建过程,使得客户端代码不直接创建对象,而是通过一个抽象的工厂接口来获取所需的对象。这样做的好处在于提高了代码的可扩展...

    JavaScript中的工厂模式:构建灵活的对象创建机制

    工厂模式是一种简单而强大的设计模式,它提供了一种灵活的对象创建机制,有助于解耦对象的创建和使用。在JavaScript中实现工厂模式,可以有效地提高代码的模块化和可维护性。通过本文的介绍,你应该能够理解工厂模式...

    三种工厂模式的代码示例

    工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。下面将详细介绍这三种工厂模式及其代码示例。 1. 简单工厂模式: 简单工厂模式通常用于创建一系列相关或相互依赖的对象。它包含一个工厂类...

    设计模式之三种工厂模式

    本篇将详细讲解三种工厂模式:简单工厂模式、工厂方法模式和抽象工厂模式,以及它们在实际开发中的应用。 1. 简单工厂模式(Simple Factory Pattern) 简单工厂模式是工厂模式的最基础形式,通过一个公共的工厂类来...

    C++ 工厂模式 (简单工厂、工厂和抽象工厂)

    ### C++工厂模式详解:简单工厂、工厂方法与抽象工厂 #### 一、引言 在软件工程领域,设计模式是一种被广泛接受的解决常见问题的解决方案。其中,工厂模式是一种常用的创建型模式,用于封装对象的创建过程,提供一...

    设计模式一:简单工厂模式(PHP源码)

    简单工厂模式是软件设计模式中的一种,它属于创建型模式,主要用来解决对象的创建问题。在PHP中,我们可以利用这种模式来简化对象的实例化过程,减少代码的耦合度,提高代码的可维护性。 简单工厂模式的核心思想是...

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

    C#中的工厂模式分为简单工厂、抽象工厂和单例模式三种,每一种都有其特定的应用场景和优势。 1. **简单工厂模式**: 简单工厂模式是一种静态工厂方法,它创建一个具体的对象而无需暴露创建逻辑。在C#中,我们可以...

Global site tag (gtag.js) - Google Analytics