c++ 设计者模式——工厂模式

1、面向接口编程:最简单的表现形式是,你的变量要声明成抽象基类;

2、为什么要实现面向接口编程:设计原则:依赖倒置原则——应该依赖抽象而不是细节。

3、抽象基类是不能创建的,不能new的。

4、创建对象的方法:除了在栈上、或者是在堆上创建对象,也可以通过方法返回对象。

5、虚函数:运行时的依赖

模式定义:定义一个用于创建对象的接口(工厂基类);让子类(子类工厂)决定实例化哪一个类(具体类);

目的:解耦,手段是虚函数

要点总结:

Factory Method用于隔离类对象的使用这和具体类之间的耦合关系。而对于一个经常变化具体类型,耦合关系会导致软件的脆弱;
Factory Method模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展的策略,较好的解决这种紧耦合关系。
Factory Method模式解决“单个对象”的需求华变化。缺点在与要求创建方法相同

具体类图关系

具体实现如下:

Product实现:

spliter.h
#pragma once

#include<iostream>

using namespace std;
//产品Product基类
class ISpliter
{
public:
	virtual void split() = 0;
};
//具体产品

//产品一:二进制切割器
class BinarySpliter :public ISpliter
{
public:
	void split()
	{
		cout << "BinarySpliter Split" << endl;
	}
};

//产品二:视频切割器
class VedioSpliter :public ISpliter
{
public:
	void split()
	{
		cout << "VedioSpliter Split" << endl;
	}
};
//产品三:文件切割器
class FileSpliter :public ISpliter
{
public:
	void split()
	{
		cout << "FileSpliter Split" << endl;
	}
};

Creator实现:

factory.h


#pragma once
#include"ISpliter.h"

//创造器Creator基类接口
class SpliterFactory
{
public:
	virtual ISpliter* CreateSpliter() = 0;
};
//具体的创建器工厂

//工厂一:二进制切割器创造工厂
class BinarySpliterFactory :public SpliterFactory
{
public:
	ISpliter* CreateSpliter()
	{
		return new BinarySpliter();
	}
};
//工厂二:视频切割器创造工厂
class VedioSpliterFactory :public SpliterFactory
{
public:
	ISpliter* CreateSpliter()
	{
		return new VedioSpliter();
	}
};
//工厂三:文件切割器创造工厂
class FileSpliterFactory :public SpliterFactory
{
public:
	ISpliter* CreateSpliter()
	{
		return new FileSpliter();
	}
};

 

使用者实现:

#pragma once
//对象的使用者
#include"SpliterFactory.h"
class MainForm
{
public:
	MainForm(SpliterFactory* factory)
	{
		this->factory = factory;
	}
public:
	
	ISpliter* Button1_Click() {
		 return factory->CreateSpliter();
	}
private:
	SpliterFactory* factory;
};

 

测试:

#include"MainForm.h"

int main()
{
	SpliterFactory* bf = new VedioSpliterFactory();
	MainForm mainform(bf);
	ISpliter* spliter = mainform.Button1_Click();
	spliter->split();


	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值