C++设计模式

设计模式:问题,解决方案和环境。

设计模式分类主要为创建型模式、结构型模式和行为型模式。

设计模式的基本原则:开放封闭原则、依赖倒置原则、接口隔离原则、里氏替换原则、合成复用原则、迪米特法则。

简单工厂模式:通过专门定义一个类来创建其他类的实例。

工厂方法模式同样属于类的创建型模式,又被称为多态工厂模式。

抽象工厂模式:可以创造多个产品组的产品对象。

三种工厂模式的区别:

简单工厂:对于增加新的产品,无能为力。

工厂模式:支持增加新的产品。

抽象工厂:可以增加产品族。

 

以下为简单工厂模式

#include<iostream>     //简单工厂
using namespace std;
class Car
{
public:
	virtual void show()=0; 
};
class BENZ : public Car
{
public:
	void show()
	{
		cout << "BENZ" << endl;
	}
};
class HONDA : public Car
{
public:
	void show()
	{
		cout << "HONDA" << endl;
	}
};
class BMW : public Car
{
public:
	void show()
	{
		cout << "BMW" << endl;
	}
};
class Factory                                
{
public:
	Car *CreateBMW()
	{
		return new BMW;
	}
	Car *CreateBENZ()
	{
		return new BENZ;
	}
	Car *CreateHONDA()
	{
		return new HONDA;
	}
};
int main()
{
	Car *c=NULL;
	Factory *f=new Factory;
	c=f->CreateBENZ();
	c->show();
	delete c;
	c=f->CreateHONDA();
	c->show();
	delete c;
	c=f->CreateBMW();
	c->show();
	delete c;
	return 0;
}

工厂模式:

#include<iostream>         //工厂模式
using namespace std;
class Car
{
public:
	virtual void show()=0; 
};
class BENZ : public Car
{
public:
	void show()
	{
		cout << "BENZ" << endl;
	}
};
class HONDA : public Car
{
public:
	void show()
	{
		cout << "HONDA" << endl;
	}
};
class BMW : public Car
{
public:
	void show()
	{
		cout << "BMW" << endl;
	}
};
class Factory                                
{
public:
	virtual Car *Create()=0;
};
class CreateBMW : public Factory
{
	Car *Create()
	{
		return new BMW;

	}
};
class CreateBENZ : public Factory
{
	Car *Create()
	{
		return new BENZ;
	}
};
class CreateHONDA : public Factory
{
	Car *Create()
	{
		return new HONDA;
	}
};
int main()
{
	Car *c=NULL;
	Factory *f=new CreateBENZ;
	c=f->Create();
	c->show();
	delete c;
	delete f;
	f=new CreateHONDA;
	c=f->Create();
	c->show();
	delete c;
	delete f;
	return 0;
}

抽象工厂模式:

#include<iostream>
using namespace std;
class Fruit
{
public:
	virtual void show()=0;
};
class NorthApple : public Fruit
{
public:
	void show()
	{
		cout << "NorthApple" << endl;
 	}
};
class NorthBanana : public Fruit
{
public:
	void show()
	{
		cout << "NorthBanana" << endl;
	}
};
class SouthApple : public Fruit
{
public:
	void show()
	{
		cout << "SouthApple" << endl;
	}
};
class SouthBanana : public Fruit
{
public:
	void show()
	{
		cout << "SouthBanana" << endl;
	}
};
class Factory
{
public:
	virtual Fruit *CreateApple()=0;
	virtual Fruit *CreateBanana()=0;
};
class NorthFactory : public Factory
{
public:
	Fruit *CreateApple()
	{
		return new NorthApple;
	}
	Fruit *CreateBanana()
	{
		return new NorthBanana;
	}
};
class SouthFactory : public Factory
{
public:
	Fruit *CreateApple()
	{
		return new SouthApple;
	}
	Fruit *CreateBanana()
	{
		return new SouthBanana;
	}
};
void Create(Factory *f)
{
	Fruit *fruit=NULL;
	fruit=f->CreateApple();
	fruit->show();
	delete fruit;
	fruit=f->CreateBanana();
	fruit->show();
	delete fruit;
}
int main()
{
	Factory *f=new NorthFactory;
	Create(f);
	delete f;
	f=new SouthFactory;
	Create(f);
	delete f;
	return 0;       //抽象工厂,运用了多态
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值