23种设计模式之(二)工厂方法模式(Factory Method)
本文主要介绍23种设计模式之工厂方法模式,附详细python/c++示例代码。
- 概念
- 应用场景
- 注意事项
- 代码示例
- 总结
- 代码链接
工厂方法模式(Factory Method)
概念
工厂方法模式属于类的创建型模式又被称为多态工厂模式 ,工厂方法模式的意义在于定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。
核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
GoF对工厂方法模式的定义是:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。
应用场景
由于需求的变化,一个类的子类经常面临着剧烈的变化,但他却拥有比较稳定的接口。使用一种封装机制来“隔离这种易变对象的变化”,工厂方法定义一个用于创建对象的接口,让子类来确定创建哪一个具体类的对象,将对象的实例化延迟。
代码示例
C++代码示例
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
/************************************************************************/
/* 设计模式专题
/*
/* 工厂方法模式
/*
/* Author : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date : 20180913
/************************************************************************/
class Fruit
{
public:
virtual void show() = 0;
};
class Banana : public Fruit
{
public:
void show()
{
printf("i am an banana\n");
}
};
class Apple : public Fruit
{
public:
void show()
{
printf("i am an apple\n");
}
};
class FruitFactory
{
public:
virtual Fruit *CreateProduct() = 0;
};
class BananaFactory :public FruitFactory
{
public:
virtual Fruit *CreateProduct()
{
return new Banana;
}
};
class AppleFactory :public FruitFactory
{
public:
virtual Fruit *CreateProduct()
{
return new Apple;
}
};
void main()
{
FruitFactory *factory = NULL;
Fruit *fruit = NULL;
//Banana
factory = new BananaFactory;
fruit = factory->CreateProduct();
fruit->show();
delete fruit;
delete factory;
//Apple
factory = new AppleFactory;
fruit = factory->CreateProduct();
fruit->show();
delete fruit;
delete factory;
}
python代码示例
# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
#
# 工厂方法模式
#
# Author : zzl
#
# 编程环境: window10 python2.7
#
# Date : 20180913
##################################################################
class Fruit(object):
def show(self):
pass
class Banana(Fruit):
def show(self):
print("i am an banana")
class Apple(Fruit):
def show(self):
print("i am an apple")
class FruitFactory(object):
def create_product(self):
pass
class BananaFactory(FruitFactory):
def create_product(self):
return Banana()
class AppleFactory(FruitFactory):
def create_product(self):
return Apple()
if __name__ == "__main__":
# Banana
factory = BananaFactory()
fruit = factory.create_product()
fruit.show()
factory = AppleFactory()
fruit = factory.create_product()
fruit.show()