大话设计模式笔记一

将其java代码转化为Cpp 代码。

#include <iostream>
#include <string>

using namespace std;

void func1()
{
	cout << "please input number A:" << endl;
	long numberA;
	cin >> numberA;

	cout << "please input operate(+_*/):" << endl;
	char operate;
	cin >> operate;

	cout << "please input number B:" << endl;
	long numberB;
	cin >> numberB;

	switch (operate)
	{
	case‘+‘:
		cout << "result is : " << numberA + numberB << endl;
		break;
	case‘-‘:
		cout << "result is : " << numberA - numberB << endl;
		break;
	case‘*‘:
		cout << "result is : " << numberA * numberB << endl;
		break;
	case‘/‘:
		cout << "result is : " << (double)numberA / numberB << endl;
		break;
	}
}

  

#include <iostream>
#include <string>

using namespace std;

class Operation
{
protected:
	double numberA;
	double numberB;
public:
	double GetNumberA(){ return numberA; }
	double GetNumberB(){ return numberB; }
	void SetNumbers(double value1, double value2){ numberA = value1; numberB = value2; }
	virtual double GetResult(){ return 0.0; }
};

class OperationAdd : public Operation
{
public:
	double GetResult()
	{
		return numberA + numberB;
	}
};

class OperationSub : public Operation
{
public:
	double GetResult()
	{
		return numberA - numberB;
	}
};

class OperationMul : public Operation
{
public:
	double GetResult()
	{
		return numberA * numberB;
	}
};

class OperationDiv : public Operation
{
public:
	double GetResult()
	{
		return numberA / numberB;
	}
};

class OperationFactory
{
public:
	static Operation* CreateOperate(char operate){
		Operation *p = NULL;
		switch (operate)
		{
		case‘+‘:
			p = new OperationAdd();
			break;
		case‘-‘:
			p = new OperationSub();
			break;
		case‘*‘:
			p = new OperationMul();
			break;
		case‘/‘:
			p = new OperationDiv();
			break;
		}
		return p;
	}
};

void func2()
{
	double a = 7.0;
	double b = 8.0;
	char op = ‘*‘;
	Operation* oper = OperationFactory::CreateOperate(op);
	oper->SetNumbers(a,b);
	cout << a << op << b << " equal " <<
	oper->GetResult() << endl;

}

  

时间: 2024-10-20 01:25:46

大话设计模式笔记一的相关文章

设计模式----看大话设计模式笔记(二)

9.原型模式(Prototype): 用原型实例指定创建对象的种类,并通过拷贝这些原型创建行的对象. UML图: 原型模式其实就是从一个对象创建另一个可定制的对象,并且不需要知道任何创建的细节. .NET 中实现ICloneable接口即可. 一般在初始化信息不发生变化的情况下,克隆是最好的办法,隐藏了对象创建的细节,又提高了性能. MemberwiseClone()方法,如果字段是值类型,对该字段进行逐位复制:如果是引用类型,复制引用但是不复制引用的对象,因此原始对象及产生的副本引用同一对象.

大话设计模式笔记 原型模式

原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节. 基本类型与引用类型的区别于关系在efficient java. http://www.cnblogs.com/linkarl/p/4785329.html 浅复制:对象的引用仍然指向原来的对象 深复制:把引用对象的变量指向复制过的新对象 我认为一般深复制比较常用. package prototype; public

大话设计模式 笔记2——策略模式

定义Context类,将简单工厂模式中,在客户端的判断转移到了后台context类中,定义运算的基类,该基类具有运算的抽象方法,扩展出多种子类后,分别对该抽象方法进行重写:后台根据前台的条件,判断并new出对应的对象后,将对象赋给一个基类对象,由基类对象调用对应的计算方法. Tips:在客户端中尽可能地消除判断等逻辑操作是很重要的让客户端认识更少的类任何需求的变更都是要成本的

大话设计模式笔记 代理模式

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. package proxy; /* * Subject Class,the common interface of RealSubject and Proxy, */ public abstract class Subject { public abstract void Request(); } package proxy; //represent the real entity public class RealSubj

大话设计模式笔记 合成/聚合复用原则

合成/聚合复用原则,尽量使用合成/聚合,尽量不要使用类继承. 聚合(Aggregation)表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象但B对象不是A对象的一部分. 合成(Composition)则是一种强的'拥有'关系,体现了严格的部分和整体关系,部分和整体的生命周期一样. 优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上,这样类和类继承层次会保持较小规模,而且不太可能增长为不可控制的庞然大物. 继承是一种强耦合的结构.子类随父类改变而改变,一定要在是‘is-

大话设计模式笔记 职责链模式 中介者模式

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 优点:当客户提交一个请求是,请求是沿链传递直至有一个ConcreteHandler对象负责处理它. 接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构.结果是职责链可以简化对象的相互连接. 中介者模式(Mediator),用一个中介对象来封装一系列的对象交互.中介者使各对

大话设计模式笔记 组合模式 迭代模式 单例模式

组合模式(Composite),将对象组合合成树形以表示“部门整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 一句话说就是利用树这种数据结构储存对象. 迭代模式(Iterator),提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 数据结构内容. 单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问他的 全局访问点. efficient java 中已经详细介绍了

大话设计模式笔记 工厂模式

package sampleFactory; public interface IFactory { Operation createOperation(); } package sampleFactory; public class AddFactory implements IFactory { @Override public Operation createOperation() { return new OperationAdd(); } public static void main

大话设计模式笔记 备忘录模式

备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态. package Memento; //发起人 public class Originator { //记录此刻内部状态 private String state; public String getState() { return state; } public void setState(String state) { t

大话设计模式笔记 状态模式(不推荐) 适配器模式

状态模式(State),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当一个对象状态转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化. 说实话这模式用起来好费劲,起到的作用也不是很大. 适配器(Adapter),将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作. 如果能先事先预防接口不同的问题,不匹配问题就不会发生; 在