c++:设计模式

设计模式的概念和目的:

概念:设计模式是一套被反复使用、多数人知晓的、经过分目编类的、代码设计经验的总结。

目的:使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码的可靠性。设计模式使代码编制真正工程化。

设计模式的分类:

(1)创建型模式:通常和对象的创建有关,涉及到对象实例化的方式。(共5种模式)

(2)结构型模式:描述的是如何组合类和对象以获得更大的结构。(共7种模式)

(3)行为型模式:用来对类或对象怎样交互和怎样分配职责进行描述。(共11种模式)

设计模式的基本原则:

(1)开放封闭原则:类的改动是通过增加代码进行的,而不是修改源代码。

(2)依赖倒置原则:依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程。

(3)接口隔离原则:不应该强迫客户的程序依赖他们不需要的接口方法。一个接口应该只提供一种对外功能。

(4)里氏替换原则:任何抽象类出现的地方都可以用他的实现类进行替换。实际就是虚拟机制,语言级别实现面向对象功能。

(5)合成复用原则:如果使用继承,会导致父类的任何变换都可能影响到子类的行为。如果使用对象组合,就降低了这种依赖                                      关系。

(6)迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用。

这里用代码重点描述前两个原则:

1、开放封闭原则:

//开放封闭原则
#include<iostream>
using namespace std;

/*
class BankWorker
{
public:
	void SaveMoney()
	{
		cout<< "SaveMoney" <<endl;
	}
	void GetMoney()
	{
		cout<< "GetMoney" <<endl;
	}
	void TransformMoney()
	{
		cout<< "TransformMoney" <<endl;
	}
};
*/

class BankWorker               //增加代码 而不修改源代码
{
public:
	virtual void work() = 0;
};

class SaveMoney : public BankWorker
{
public:
	void work()
	{
		cout<< "SaveMoney" <<endl;
	}
};

class GetMoney : public BankWorker
{
public:
	void work()
	{
		cout<< "GetMoney" <<endl;
	}
};

class TransformMoney : public BankWorker
{
public:
	void work()
	{
		cout<< "TransformMoney" <<endl;
	}
};

//如果增加功能 可再添加类

int main()
{
	/*
	BankWorker *b = new BankWorker;
	b->SaveMoney();
	b->GetMoney();
	delete b;
	*/
	
	BankWorker *b = NULL;       //增加代码后调用也变化
	b = new SaveMoney;
	b->work();
	
	return 0;
}
	

2、依赖倒置原则:

//依赖倒置原则
#include<iostream>
using namespace std;

class RAM                     //抽象
{
public:
	virtual void RAMwork() = 0;
};

class RAM_2G : public RAM     //实现    依赖于抽象
{
public:
	void RAMwork()
	{
		cout<< "RAM_2G" <<endl;
	}
};

class RAM_4G : public RAM     //实现
{
public:
	void RAMwork()
	{
		cout<< "RAM_4G" <<endl;
	}
};

class ROM                      //抽象
{
public:
	virtual void ROMwork() = 0;
};

class ROM_32G : public ROM     //实现
{
public:
	void ROMwork()
	{
		cout<< "ROM_32G" <<endl;
	}
};

class ROM_64G : public ROM     //实现
{
public:
	void ROMwork()
	{
		cout<< "ROM_64G" <<endl;
	}
};

class Phone
{
private:
	RAM *ram;
	ROM *rom;
public:
	Phone(RAM *a , ROM *o)
	{
		ram = a;
		rom = o;
	}
	void Phonework()
	{
		ram->RAMwork();
		rom->ROMwork();
	}
};

int main()
{
	RAM *ram = new RAM_2G;
	ROM *rom = new ROM_32G;
	
	Phone *p = new Phone(ram , rom);
	p->Phonework();
	delete ram;
	delete rom;
	delete p;
	
	cout<< "---------------" <<endl;
	
	ram = new RAM_4G;
	rom = new ROM_64G;
	
	p = new Phone(ram , rom);
	p->Phonework();
	delete ram;
	delete rom;
	delete p;
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/xutong98/article/details/81624822
今日推荐