Factory模式

简介:

  Factory模式的两个重要功能:

1)定义创建对象的接口,封装了对象的创建;

2)使得具体化类的工作延迟到了子类中。

  声明一个创建对象的接口,并封装了对象的创建过程的Factory的结构示意图为:

  Factory模式不单是提供了创建对象的接口,其最重要的是延迟了子类的实例化。

 

                  图二

  图二中Factory模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。这是图二和图一的区别所在。

 

完整代码示例:


//Product.h 
#ifndef _PRODUCT_H_ 
#define _PRODUCT_H_ 
class Product { 
public:
    virtual ~Product() =0; 
protected: 
    Product(); //屏蔽构造函数
private: 
}; 
class ConcreteProduct:publicProduct { 
public: 
    ~ConcreteProduct(); 
    ConcreteProduct(); 
protected: 
private: 
}; 
#endif //~_PRODUCT_H_ 


//Product.cpp 
#include "Product.h" 
#include<iostream> using namespace std; 
 
Product::Product() { } 
Product::~Product() { } 
 
ConcreteProduct::ConcreteProduct() { 
    cout<<"ConcreteProduct...."<<endl; 
} 
 
ConcreteProduct::~ConcreteProduct() { } 


//Factory.h 
#ifndef _FACTORY_H_ #define _FACTORY_H_ 
class Product; 
class Factory { 
public:
    virtual ~Factory() = 0; 
    virtual Product* CreateProduct() = 0; 
protected:
    Factory(); 
private: 
}; 
class ConcreteFactory:public Factory {
public: 
    ~ConcreteFactory(); 
    ConcreteFactory(); 
    Product* CreateProduct(); 
protected: 
private: 
}; 
#endif //~_FACTORY_H_ 


//Factory.cpp 
#include "Factory.h" 
#include "Product.h" 
#include <iostream> using namespace std; 
Factory::Factory() { } 
Factory::~Factory() { } 
ConcreteFactory::ConcreteFactory() { 
    cout<<"ConcreteFactory....."<<endl; 
} 
ConcreteFactory::~ConcreteFactory() { } 
Product* ConcreteFactory::CreateProduct(){
    return new ConcreteProduct(); 
} 


//main.cpp 
#include "Factory.h"
#include "Product.h" 
#include <iostream>
using namespace std; 
int main(int argc,char* argv[]) {
    Factory* fac = new ConcreteFactory(); 
    Product* p = fac->CreateProduct(); 
    return 0; 
}


 示例代码中给出的是Factory模式解决父类中并不知道具体要实例化哪一个具体的子类的问题,至于为创建对象提供接口问题,可以由Factory中附加相应的创建操作例如Create***Product()即可。


目录
相关文章
|
7月前
|
设计模式
Factory模式是什么呀
Factory模式是什么呀
|
设计模式 Java 数据库连接
工厂模式(Factory Pattern)
工厂模式(Factory Pattern)是一种常用的设计模式,它提供了一种创建对象的方式,可以根据不同的需求,动态地创建不同类型的对象。
83 1
|
XML SpringCloudAlibaba Java
Spring注解配置:@Configuration 和 @Component 区别及原理详解
随着`Spring Boot`的盛行,注解配置式开发受到了大家的青睐,从此告别了基于`Spring`开发的繁琐`XML`配置。这里先来提纲挈领的了解一下`Spring`内部对于配置注解的定义,如`@Component、@Configuration、@Bean、@Import`等注解,从功能上来讲,这些注解所负责的功能的确不相同,但是
350 1
|
设计模式 Java
工厂模式(Factory Pattern)(三)
工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的绝佳方式。
121 2
工厂模式(Factory Pattern)(三)
|
设计模式 Java
工厂模式(Factory Pattern)(一)
工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的绝佳方式。
112 1
工厂模式(Factory Pattern)(一)
|
设计模式 Java API
工厂模式(Factory Pattern)(二)
工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的绝佳方式。
114 1
工厂模式(Factory Pattern)(二)
|
设计模式 Java Spring
工厂模式(Factory)
工厂模式是创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,创建对象不会对客户端暴露创建逻辑,隐藏创建对象的详情,从而实现客户端与具体实现的解耦。工厂模式设计时需求注意的点: 工厂类提供公共的方法来创建对象,无论静态,而不是客户端直接创建 方法的参数可选,但参数只用来决定哪种实现,不应该存在业务参数 方法的返回一般是被创建的接口对象,也可以是抽象类或具体类 常见的工厂模式有工厂方法模式、简单工厂模式和抽象工厂模式等,并不要拘泥于哪种,在实际业务中根据需求设计。
218 0
工厂模式(Factory)
|
XML Java 数据格式
@Component 和 @Bean 的区别
@Component 和 @Bean 的区别
282 0
|
设计模式
工厂模式(Factory)
1、简单工厂 2、工厂方法 3、抽象工厂 简单工厂和工厂方法这俩个设计模式不做详细介绍,请各位看官自行百度,有大量的解释。再次我简单引用一下其他博客主对这三种模式的理解。
1024 0
|
C# 设计模式 .NET
使用C# (.NET Core) 实现简单工厂(Simple Factory) 和工厂方法设计模式 (Factory Method Pattern)
本文源自深入浅出设计模式. 只不过我是使用C#/.NET Core实现的例子.   前言 当你看见new这个关键字的时候, 就应该想到它是具体的实现. 这就是一个具体的类, 为了更灵活, 我们应该使用的是接口(interface).
1448 0