工厂方法(Factory Method)
Factory Method模式简介:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
Factory Method模式结构:
C++代码
Product抽象类以及ConcreteProduct具体实现类:
//file: Product.h
#pragma once
class Product
{
public:
Product();
virtual ~Product();
virtual void func();
};
class ConcreteProduct : public Product
{
public:
ConcreteProduct();
virtual ~ConcreteProduct();
virtual void func();
};
//file: product.cpp
#include "pch.h"
#include "Product.h"
#include <iostream>
using namespace std;
//Product
Product::Product() {}
Product::~Product() {}
void Product::func() {}
//ConcreteProduct
ConcreteProduct::ConcreteProduct() {}
ConcreteProduct::~ConcreteProduct() {}
void ConcreteProduct::func()
{
cout << "Concrete Product's Func ." << endl;
}
Factory抽象类以及ConcreteFactory具体实现类:
//file: Factory.h
#pragma once
#include "Product.h"
class Factory
{
public:
Factory();
virtual ~Factory();
virtual Product* factoryMethod();
};
class ConcreteFactory : public Factory
{
public:
ConcreteFactory();
virtual ~ConcreteFactory();
virtual Product* factoryMethod();
};
//file: Factory.cpp
#include "pch.h"
#include "Factory.h"
//Factory
Factory::Factory() {}
Factory::~Factory() {}
Product* Factory::factoryMethod()
{
return nullptr;
}
//ConcreteFactory
ConcreteFactory::ConcreteFactory() {}
ConcreteFactory::~ConcreteFactory() {}
Product* ConcreteFactory::factoryMethod()
{
return new ConcreteProduct;
}
客户端代码:
//file: FactoryMethodPattern.cpp : This file contains the 'main' function. Program execution begins and ends there.
#include "pch.h"
#include "Factory.h"
#include <iostream>
using namespace std;
int main()
{
Factory* fc = new ConcreteFactory();
Product* prod = fc->factoryMethod();
prod->func();
delete fc;
delete prod;
char c;
cin >> c;
return 0;
}
C#代码
Product抽象类以及ConcreteProduct具体实现类:
public abstract class Product
{
public virtual void Func()
{
Console.WriteLine("Basic Func Of The Product .");
}
}
public class ConcreteProduct : Product
{
public override void Func()
{
base.Func();
Console.WriteLine("The Concrete Product's External Func .");
}
}
Factory抽象类以及ConcreteFactory具体实现类:
public abstract class Factory
{
public abstract Product FactoryMethod();
}
public class ConcreteFactory : Factory
{
public override Product FactoryMethod()
{
return new ConcreteProduct();
}
}
客户端代码:
using System;
namespace FactoryMethodPattern
{
class Program
{
static void Main(string[] args)
{
Factory fc = new ConcreteFactory();
Product prod = fc.FactoryMethod();
prod.Func();
Console.ReadKey(false);
}
}
}
REF
书籍:
设计模式与游戏开发、大话设计模式
GitHub: