设计模式工作笔记-简单工厂场景与实现(针对接口编程的设计思想)

简单工厂:通过接口的方式,把实现和变化隔离


接口编程:是一种特殊的抽象类,是一个纯虚类。通常接口来定义类的外部,就相当于一份契约,其实就是根据外部应用



需要的功能,约定了实现类应该要实现的功能。


软件开发中永恒的主题是“变化”,接口的最重要的一个设计语义就是封装变化,也就是隔离变化(内部实现对外部是透


明的)。


从软件的整体结构上来看,只要接口不变,内部实现的变化就不会影响到外部应用,从而使得系统更加灵活,具有更好的


扩展性和可维护性。




设计模式的重点是对象间的结构!!!


如下面的这一套代码:

#include <iostream>
#include <string>
using namespace std;


class Api{
public:
	virtual void print(string data) = 0;
protected:
	Api(){}	//屏蔽构造函数,体现接口
};


class Imple :public Api{
public:
	void print(string data){
		cout << "print in Imple: " << data << endl;
	}
};


//测试用的客户端
int main(){
	Api *pApi = new Imple();
	pApi->print("运行");
	system("pause");
	return 0;
}



此程序的封装性;
因为简单工厂要求实现与变化分离;
而Api *pApi = new Imple();中客户已经知道你这里面有一个Imple了;
所以这不是简单工厂所要提现的


下面这个是简单工厂的思想:

#include <iostream>
#include <string>
using namespace std;

class Api{
public:
	virtual void print(string data) = 0;
protected:
	Api(){}
}; 

class ImpleOne :public Api{
public:
	void print(string data){
		cout << "print in ImpleOne: " << data << endl;
	}
};

class ImpleTwo :public Api{
public:
	void print(string data){
		cout << "print in ImpleTwo: " << data << endl;
	}
};


//下面的这个是关键了啊,这个Factory具有承上启下的作用
class Factory{
public:
	static Api* createApi(int type){
		Api *pApi = nullptr;
		if (type == 1){
			pApi = new ImpleOne;
		}
		else if (type == 2){
			pApi = new ImpleTwo;
		}
		return pApi;
	}
};

/*
使用
传入参数1,可以实现从数据库读入的功能,
传入参数2,可以实现从文本读入的功能
这就是更具接口的公约,实现做什么样的事情

实现和变化隔离,但觉得参数2效率不行时,执行修改2里面的东西,这样就实现了分离
简单工厂:通过接口的方式,把实现和变化隔离
*/


int main(){
	Api *pApi = Factory::createApi(1);    //感觉就是把2个new的工作放到了Factory里面
	pApi->print("简单工厂!");            //如何理解是不是把new放进去就是简单工厂
	system("pause");
	return 0;
}


//实现了客户调用和implOne,implTwo的解耦合
//factory类实现了变化隔离







简单工厂的定义:
提供一个创建对象实例的功能,而无需关心其具体实现。被创建的类型可以是接口、抽象类,也可以是具体的类。

猜你喜欢

转载自blog.csdn.net/qq78442761/article/details/80823860