几种常见设计模式的实现

单例设计模式的实现:(懒汉式,线程安全)

#include <iostream>
#include <mutex>

using namespace std;

class Singleton{
public:
	static Singleton* getInstance();
	void SingletonOperation();
private:
	static Singleton* singleton;
	static mutex s_mutex;
	Singleton(){}
	~Singleton();
};

Singleton* Singleton::singleton = NULL;

Singleton* Singleton::getInstance() {
	if (singleton == NULL) {
		lock_guard<mutex> lock(s_mutex);
		if (singleton == NULL) {
			singleton = new Singleton();
			cout << "new a singleton" << endl;
		}
	}
	return singleton;
}

Singleton::~Singleton() {
	if (singleton != NULL)
	{
		delete singleton;
		singleton = nullptr;
	}
}

void  Singleton::SingletonOperation() {
	cout << "singleton operation" << endl;
}

int main() {
	Singleton* single = Singleton::getInstance();
	single->SingletonOperation();
}

 工厂设计模式实现

#include <iostream>

using namespace std;

class Product {
public:
	Product(){}
	~Product(){}
	virtual void use() = 0;
};

class CreateProductA : public Product
{
public:
	CreateProductA(){}
	~CreateProductA(){}
	virtual void use() {
		cout << "create product A" << endl;
	}
};

class Factory {
public:
	Factory(){}
	~Factory(){}
	virtual Product* CreateProduct() = 0;
};

class CreateFactory : public Factory
{
public:
	CreateFactory(){}
	~CreateFactory(){}
	virtual Product* CreateProduct() {
		return new CreateProductA();
	}
};

int main() {
	//当有不同的产品加入时, 创建产品的实例, 只需要创建一个新产品的Factory类, 不需要对上一个产品的类进行修改
	Factory* factory = new CreateFactory();
	Product* productA = factory->CreateProduct();
	productA->use();
	delete productA;
	delete factory;
}

 抽象工厂的设计实现:

#include <iostream>

using namespace std;

class AbstractProductA {
public:
	AbstractProductA(){}
	~AbstractProductA(){}
	virtual void set() = 0;
};

class AbstractProductB {
public:
	AbstractProductB(){}
	~AbstractProductB(){}
	virtual void use() = 0;
};

class ProductA1 : public AbstractProductA
{
public:
	ProductA1(){}
	~ProductA1(){}
	virtual void set() {
		cout << "product  A  1" << endl;
	}
};

class ProductA2 : public AbstractProductA
{
public:
	ProductA2(){}
	~ProductA2(){}
	virtual void set() {
		cout << "product A 2 " << endl;
	}
};

class ProductB1 : public AbstractProductB
{
public:
	ProductB1(){}
	~ProductB1(){}
	virtual void use() {
		cout << "product B 1" << endl;
	}
};

class ProductB2 : public AbstractProductB
{
public:
	ProductB2(){}
	~ProductB2(){}
	virtual void use() {
		cout << "product B 2" << endl;
	}
};

class AbstractFactory {
public:
	AbstractFactory(){}
	~AbstractFactory(){}
	virtual AbstractProductA* createProductA() = 0;
	virtual AbstractProductB* createProductB() = 0;
};

class AbstractFactory1 : public AbstractFactory
{
public:
	AbstractFactory1(){}
	~AbstractFactory1(){}
	virtual AbstractProductA* createProductA() {
		return new ProductA1();
	}
	virtual AbstractProductB* createProductB() {
		return new ProductB1();
	}
};

class AbstractFactory2 : public AbstractFactory
{
public:
	AbstractFactory2(){}
	~AbstractFactory2(){}
	virtual AbstractProductA* createProductA() {
		return new ProductA2();
	}
	virtual AbstractProductB* createProductB() {
		return new ProductB2();
	}
};

int main() {
	AbstractFactory* factory1 = new AbstractFactory1();
	AbstractProductA* productA1 = factory1->createProductA();
	productA1->set();
	AbstractProductB* productB1 = factory1->createProductB();
	productB1->use();
	AbstractFactory* factory2 = new AbstractFactory2();
	AbstractProductA* productA2 = factory2->createProductA();
	productA2->set();
	AbstractProductB* productB2 = factory2->createProductB();
	productB2->use();
	delete productB2;
	delete productA2;
	delete factory2;
	delete productB1;
	delete productA1;
	delete factory1;
}

 适配器模式实现:

Adaptee.h

#pragma once 
#ifndef _ADAPTEE_H
#define _ADAPTEE_H

#include <iostream>

class Adaptee
{
public:
	Adaptee(){}
	~Adaptee(){}
	void Request();
};

#endif

Adaptee.cpp

#include "Adaptee.h"

void Adaptee::Request()
{
	std::cout << "response for Adapter" << std::endl;
}

Adapter.h

#pragma once 
#ifndef _ADAPTER_H
#define _ADAPTER_H

#include "Adapter.h"

class Adaptee;

class Adapter
{
public:
	Adapter(Adaptee* adapter);
	~Adapter(){}
	void SpecificRequest();
private:
	Adaptee* m_adaptee;
};

#endif

Adapter.cpp

#include "Adapter.h"
#include "Adaptee.h"

Adapter::Adapter(Adaptee* adapter)
{
	m_adaptee = adapter;
}

void Adapter::SpecificRequest()
{
	m_adaptee->Request();
}

main.cpp

#include "Adaptee.h"
#include "Adapter.h"

int main()
{
	Adaptee* adaptee = new Adaptee();
	Adapter* adapter = new Adapter(adaptee);
	adapter->SpecificRequest();
	delete adaptee;
	delete adapter;
}

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
23种设计模式的java实现。创建型 抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html 工厂方法 http://www.cnblogs.com/java-my-life/archive/2012/03/25/2416227.html 建造者模式 http://www.cnblogs.com/java-my-life/archive/2012/04/07/2433939.html 原型模式 http://www.cnblogs.com/java-my-life/archive/2012/04/11/2439387.html 单态模式 http://www.cnblogs.com/java-my-life/archive/2012/03/31/2425631.html 结构型 适配器模式 http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html 桥接模式 http://blog.csdn.net/jason0539/article/details/22568865 组合模式 http://blog.csdn.net/jason0539/article/details/22642281 外观模式 http://blog.csdn.net/jason0539/article/details/22775311 装饰者模式 http://www.cnblogs.com/java-my-life/archive/2012/04/20/2455726.html 享元模式 http://www.cnblogs.com/java-my-life/archive/2012/04/26/2468499.html 代理模式 http://www.cnblogs.com/java-my-life/archive/2012/04/23/2466712.html 行为型 责任链模式 http://blog.csdn.net/zhouyong0/article/details/7909456 命令模式 http://www.cnblogs.com/java-my-life/archive/2012/06/01/2526972.html 解释器模式 http://www.cnblogs.com/java-my-life/archive/2012/06/19/2552617.html 迭代模式 http://www.cnblogs.com/java-my-life/archive/2012/05/22/2511506.html 中介者模式 http://blog.csdn.net/chenhuade85/article/details/8141831 备忘录模式 http://www.cnblogs.com/java-my-life/archive/2012/06/06/2534942.html 观察者模式 http://www.cnblogs.com/java-my-life/archive/2012/05/16/2502279.html 状态模式 http://www.cnblogs.com/java-my-life/archive/2012/06/08/2538146.html 策略模式 http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html 模板方法模式 http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html 访问者模式 http://www.cnblogs.com/java-my-life/archive/2012/06/14/2545381.html

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值