设计模式——6.工厂方法

工厂方法(Factory Method)

Factory Method模式简介:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

Factory Method模式结构:

FactoryMethod

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:

https://github.com/me115/design_patterns

原文地址:https://www.cnblogs.com/sylvan/p/9751059.html