`

简单工厂与工厂模式(Factory)

阅读更多
简单工厂并不是一个“真正的“模式,可以把它当作一种编程习惯。它的最大优点在于工厂类中包含必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖

工厂方法模式:定义了一个创建对象的接口,但由于类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

要点:
1.所有的工厂都是用来封闭对象的创建
2.简单工厂,虽然不是真正的设计模式,但仍不失为一个简单的方法,可以将客户程序从具体类解耦
3.工厂方法使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象
4.所有工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合
5.工厂方法允许类将实例化延迟到子类进行
6.依赖倒置原则,指导我们避免依赖具体类型,而要尽量依赖抽象

设计原则:依赖倒置:依赖抽象,不要依赖具体类
1.变量不可以持有具体类的引用
2.不要让类派生自具体类
3.不要覆盖基类中已实现的方法


Pizza.h
#ifndef PIZZA_H
#define PIZZA_H
#include<iostream>
using namespace std;
enum PizzaType{
    CHEESEPIZZA,
    VEGGIEPIZZA,
    CLAMPIZZA,
    PEPPERONIPIZZA
};

class Pizza{
public:
    virtual void prepare(){
        cout << "prepare..." << endl;
    }
    void bake(){
        cout << "bake..." << endl;
    }
    void cut(){
        cout << "cut..." << endl;
    }
    void box(){
        cout << "box..." << endl;
    }
};

class CheesePizza:public Pizza{};
class NYStyleCheesePizza:public Pizza{};

class VeggiePizza:public Pizza{};
class NYStyleVeggiePizza:public Pizza{};

class ClamPizza:public Pizza{};
class NYStyleClamPizza:public Pizza{};

class PepperonPizza:public Pizza{};
class NYStylePepperonPizza:public Pizza{};
#endif // PIZZA_H


PizzaStore.h
#ifndef PIZZASTORE_H
#define PIZZASTORE_H
#include"Pizza.h"
#include"SimplePizzaFactory.h"
class PizzaStore{
public:
    explicit PizzaStore(SimplePizzaFactory* spf=NULL){
        mFactory = spf;
    }
    //工厂方法
    virtual Pizza* createPizza(PizzaType pt)=0;

    //由于pizza是抽象的,orderPizza并不知道哪些实例加进来,也就是解耦
    Pizza* orderPizza(PizzaType pt){
        Pizza* pizza;
        //pizza = mFactory->cratePizza(pt);
        pizza = createPizza(pt);
        pizza->prepare();
        pizza->bake();
        pizza->cut();
        pizza->box();
        return pizza;
    }
private:
    SimplePizzaFactory* mFactory;
};

class NYPizzaStore:public PizzaStore{
public:
    Pizza* createPizza(PizzaType pt){
        switch(pt){
        case CHEESEPIZZA:
            return new NYStyleCheesePizza;
            break;
        case VEGGIEPIZZA:
            return new NYStyleVeggiePizza;
            break;
        case PEPPERONIPIZZA:
            return new NYStylePepperonPizza;
            break;
        case CLAMPIZZA:
            return new NYStyleClamPizza;
            break;
        default:
            return NULL;
            break;
        }
    }
};

#endif // PIZZASTORE_H



SimplePizzaFactory.h
#ifndef SIMPLEPIZZAFACTORY_H
#define SIMPLEPIZZAFACTORY_H

#include"Pizza.h"
#include<stdlib.h>
//简单工厂
class SimplePizzaFactory{
public:
    Pizza* cratePizza(PizzaType pt){
        switch(pt){
        case CHEESEPIZZA:
            return new CheesePizza;
            break;
        case VEGGIEPIZZA:
            return new VeggiePizza;
            break;
        case PEPPERONIPIZZA:
            return new PepperonPizza;
            break;
        case CLAMPIZZA:
            return new ClamPizza;
            break;
        default:
            return NULL;
            break;
        }
    }
};

class NYPizzaFactory:public SimplePizzaFactory{
public:
    Pizza* createPizza(PizzaType pt){
        switch(pt){
        case CHEESEPIZZA:
            return new NYStyleCheesePizza;
            break;
        case VEGGIEPIZZA:
            return new NYStyleVeggiePizza;
            break;
        case PEPPERONIPIZZA:
            return new NYStylePepperonPizza;
            break;
        case CLAMPIZZA:
            return new NYStyleClamPizza;
            break;
        default:
            return NULL;
            break;
        }
    }
};

#endif // SIMPLEPIZZAFACTORY_H


main.cpp
#include"PizzaStore.h"

int main(){
    PizzaStore *store = new NYPizzaStore();
    store->orderPizza(CHEESEPIZZA);
}


prepare...
bake...
cut...
box...
  • 大小: 59.4 KB
分享到:
评论

相关推荐

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

    而"Factory"可能是一个代码示例,展示了工厂模式的具体实现,包括以上提到的三种模式。 通过学习和理解这三种工厂模式,开发者可以更好地组织代码,降低模块间的耦合,提高软件的可维护性和可扩展性。在实际开发...

    工厂模式FactoryMode

    在Java中,工厂模式有三种主要形式:简单工厂模式、工厂方法模式和抽象工厂模式。 1. 简单工厂模式:也称为静态工厂模式,它通过一个静态方法来创建对象。在这个模式中,工厂类负责决定实例化哪个产品类。这种模式...

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

    总的来说,简单工厂模式提供了一种便捷的创建对象的方式,减少了客户端与具体实现之间的耦合。虽然在某些情况下可能导致代码的可扩展性和可维护性降低,但在许多简单的应用场景中,它仍然是一个实用的设计模式。理解...

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

    在软件设计模式中,工厂模式是一种非常...在实际项目中,工厂模式经常与其他设计模式(如策略模式、建造者模式等)结合使用,以解决更复杂的问题。阅读并理解这些代码有助于深入理解工厂模式及其在Java编程中的应用。

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

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

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

    简单工厂模式(Simple Factory Pattern)是一种静态工厂方法,它通过一个公共的工厂类来创建对象。这个工厂类通常包含一个或多个静态方法,用于根据输入参数创建不同类型的实例。这种模式的优点在于客户端代码无需...

    工厂方法模式(FactoryMethod)

    通常,这样的示例可能包括一个`AbstractFactory`(工厂接口)、一个或多个`ConcreteFactory`(具体工厂类)以及与之对应的`ConcreteProduct`(具体产品类)。 例如,假设我们有一个电子产品制造厂,有生产手机和...

    简单工厂模式与工厂模式和抽象工厂模式.doc

    1. **简单工厂模式(Simple Factory Pattern)** 简单工厂模式是一种最基础的工厂模式,也被称为静态工厂方法模式。它通过一个静态方法来创建对象,这个静态方法就是工厂,根据传入的参数或者条件来决定创建哪个...

    反射简单工厂模式工厂模式

    本文将深入探讨"反射"以及两种常见的工厂模式:"简单工厂模式"和"工厂方法模式",并结合提供的文件名称来解析这些概念。 首先,我们来看"反射"。在Java等面向对象语言中,反射是一种强大的工具,它允许程序在运行时...

    uml 文档 简单工厂模式

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

    简单工厂模式和工厂模式Demo

    首先,我们来看一下“简单工厂模式”(Simple Factory Pattern)。这种模式的核心思想是提供一个工厂类,负责根据输入条件创建具体的产品对象。在这个例子中,"pre1"可能是原始的、未使用设计模式的代码,可能直接...

    C#中的简单工厂模式与工厂方法模式

    ### C#中的简单工厂模式与工厂方法模式 #### 一、引言 在软件工程领域,设计模式是一种被广泛接受的解决特定问题的最佳实践。在众多设计模式中,工厂模式因其能够灵活创建对象而备受推崇。本文将详细介绍两种常见...

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

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

    java 简单工厂模式 源代码

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂...

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

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

    简单工厂模式

    简单工厂模式是软件设计模式中的一种基础模式,它属于创建型模式,主要解决对象的创建问题,降低了系统与具体创建对象之间的耦合度。在这个设计模式课程资料中,我们将使用Java语言来阐述和实现简单工厂模式,并在...

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

    工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当客户端请求创建一个产品对象时...在实际项目中,工厂模式经常与其他设计模式结合使用,如策略模式、单例模式等,以解决更复杂的问题。

    简单工厂模式_简单工厂模式_

    简单工厂模式是一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种模式使得代码能够将实例化的责任封装起来,使得客户端代码无需关心具体的对象实现,只需要知道一个公共接口即可...

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

    6. **与其他设计模式的比较**:可能会对比抽象工厂模式与单例模式、工厂方法模式等其他创建型模式,解释它们之间的区别和适用场合。 总之,"走进设计模式之抽象工厂"这篇博客深入探讨了抽象工厂模式的原理、实现...

    java 设计模式 Facade外观模式 Simple Factory 简单工厂模式

    在Java中,简单工厂模式适用于对象的创建过程较为固定或不复杂的情况。它定义一个公共的工厂类,根据传入的参数或者条件来决定返回哪个具体类的实例。这种方式降低了代码的耦合度,使得在不修改客户端代码的情况下,...

Global site tag (gtag.js) - Google Analytics