学习C++有一两年了,面向对象思想也有所接触。使用过MFC以及OSG类库进行过开发,无非就是调用别人设计好的类库,要说自己使用面向对象的思想去开发程序,这个还真没有。
意识到自己在这方面的匮乏,开始学习设计模式。教材选用《大话设计模式》,每个章节的学习过程分为三部分:第一部分,阅读课本,第二部分:按照书上例子写出C++代码的对应版本。第三部分:博客上的学习笔记。
编程是一门技术,更是一门艺术。应该经常考虑如何使代码更加简练、可扩展、可复用和易维护。这是每个立志于成为合格程序员都应具有的素质。这些东西学校不教,只有通过从大量编程中总结教训获得经验。
通过封装继承多态,把程序的耦合性降低,使程序更加的灵活、容易修改、易于复用。业务逻辑与界面逻辑分开,让他们的耦合度降低,只有这样才能达到可维护和易扩展。
1:可维护:只需改要改之处,此为可维护性
2:可复用:并非仅供一个工程内使用,以后在其他项目时也可以方便的使用。此为可复用。
3:可扩展:若要添加功能,只需在原有基础上添加即可,此为可扩展。
4:灵活性:不拘泥于一种形式。此为灵活性。
大话设计模式在介绍简单工厂模式时介绍了一个计算器的例子,引出了初学者容易犯的几个问题:知道面向对象,但是究竟好在哪里、如何更好地使用它却无从知晓。
学习设计模式四境界:
一:没学之前一点儿都不懂,根本想不到用设计模式,设计的代码很糟糕。
二:学了几个设计模式很开心,于是到处想着用自己学过的设计模式,时常造成误用设计模式而不自知。
三:学完设计模式后,感觉诸多模式极其相似,无法分清模式之间的差异。有困惑,但深知误用之害,应用之时有所犹豫。
四:灵活应用设计模式,甚至不应用某种具体的模式也能写出优秀的代码,已达到无剑胜有剑的境界。
希望自己能早日进入第四个境界,达到无剑胜有剑的境界。
在例子中,加减乘除派生自一个基类,该基类定义了公有的属性以及虚函数接口。在各个派生类中实现了每个派生类中需要的功能。除此之外还定义了简单工厂类,在简单工厂类中,根据运算符决定需要实例化那个运算功能类。
看代码:
#include<iostream>
using namespace std;
//基类
class Calculation
{
public:
Calculation(double n1,double n2)
:num1(n1),num2(n2)
{
};
Calculation()
:num1(0),num2(0)
{
};
~Calculation()
{
}
virutal double calculate()=0;
double num1;
double num2;
};
//加法
class AddCalculation:public Calculation
{
AddCalculation(double n1,double n2)
:Calculation(n1,n2)
{
}
AddCalculation()
{
}
~AddCalculation()
{
}
virtual double calculate()
{
return num1+num2;
}
} ;
//减法
class Substract:public Calculation
{
public:
Substract(double n1,double n2)
:Calculation(n1,n2)
{
}
Substract()
{
}
~Substract()
{
}
virtual double calculate()
{
return num1-num2;
}
} ;
//乘法
class Multiply:public:Calculation
{
public:
Multiply(double n1,doule n2)
:Calculaion(n1,n2)
{
}
Multiply()
{
}
~Multiply()
{
}
virtual double calculate()
{
return num1*num2;
}
};
//除法
class Divide:public Calculation
{
public:
Diviede(double n1,double n2)
:Calculation(n1,n2)
{
}
Divide()
{
}
~Divide()
{
}
virtual double calculate()
{
if(num2==0)
{
}
return num1/num2;
}
};
//抽象工厂类
class OperationFactory
{
public:
OperationFactory(double n1,char op,double n2)
{
Operator=op;
num1=n1;
num2=n2;
cal=NULL;
}
~OperationFactory()
{
if(cal)
delete cal;
}
char Operator;
Calculation * cal;
double result;
double n1;
double n2;
double createCalculation()
{
switch(Operator)
{
case '+':
{
cal=new AddCalculation(n1,n2);
}
break;
case '-':
{
cal=new Substract(n1,n2);
}
break;
case '*':
{
cal=new Multiply(n1,n2);
}
break;
case '/':
{
cal=new Divide(n1,n2);
}
break;
default:
break;
}
result=cal->calculate();
}
};
int main(int argc,char**argv)
{
double n1,n2;
while(cin>>n1>>n2);
{
OperationFactory opf(n1,'+',n2);
cout<<opf.createCalculation()<<endl;
}
return 0;
}
分享到:
相关推荐
设计模式之简单工厂模式,有文档解说,有代码案例。很适合初学者学习!
设计模式学习笔记(一)--简单工厂模式源码和类图
用代码的介绍了简单工厂模式的设计方式,希望大家一起学习。
完成了,但感觉这也没啥特别的,程序界面黑布隆冬的,内部结构也是最最平常的面向对象,于是我应用了《大话设计模式》这本书中的第一个模式——简单工厂模式,看上去还不错。界面的话,也就是输出的语句变了,system...
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂...
经典的设计模式————简单工厂模式,里面有实验文档和实验源代码还有课件助于你的学习
设计模式简单工厂模式PPT学习教案.pptx
设计模式-简单工厂模式-披萨店C#语言版 如有学习讨论意向请联系我吧~ hzher@qq.com
设计模式中工厂相关模式有简单工厂、工厂方法、抽象工厂学习后的练习代码,C++编程语言。
设计模式-工厂模式 学习练习的代码 1.简单工厂模式 2.方法工厂模式 3.抽象工厂模式 4.模拟Spring Bean工厂练习
设计模式简单工厂模式课件PPT学习教案.pptx
设计模式C#描述之——简单工厂模式,让你学习C#的一种设计模式
简单工厂模式的结构组成: 工厂类(ShoesFactory):工厂模式的核心类,会定义一个用于创建指定的具体实例对象的接口。 抽象产品类(Shoes):是具体产品类的继承的父类或实现的接口。 具体产品类(NiKeShoes\AdidasShoes...
设计模式之工厂模式,分为简单模式,抽象模式,通过Demo快速学习
设计模式-简单工厂模式,java源代码; 便于新手进行设计模式的学习
设计模式中的工厂模式源代码,供大家学习用
定义: 结构说明: 相关概念: 接口: 接口与抽象类的区别: 面向接口编程: 功能: 时序图: 优缺点: 代码阐释:
主要介绍了c# 设计模式之简单工厂模式的的相关资料,文中代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下