文档章节

24种设计模式学习记录第二篇

没有脚的大笨鸟
 没有脚的大笨鸟
发布于 2014/03/30 10:58
字数 1554
阅读 34
收藏 0

既然用了面向对象的程序设计语言,就要充分利用OO的三大特性:封装、继承、多态。大概说下这三个特性:

一.封装<数据保护>

    从字面意思上可以理解把一些东西封装起来,这里要封装的东西就是所谓的方法和属性。这样每个对象都包含它能进行操作所需要的所有信息,不必信赖其他对象来完成自己的操作。打个形象的比喻:我们的房子就是一个类的实例,室内的装饰与摆设只能被室内的居住者欣赏和使用,如果没有四面墙的遮挡,室内的所有活动在外人面前一览无遗。由于有了封装,房屋内的所有摆设都可以随意地改变而不影响他人。然而,如果没有门窗,一个包裹严实的黑箱子即使再广阔也没有实用价值。房屋的门窗,就是封装对象暴露在外的属性和方法,专门供人进出以及流通空气带来阳光。

    封装的好处:1,良好的封装能够减少耦合;2,类内部的实现可以自由的修改而不会影响外部的使用;3,类具有清晰的对外接口。

二.继承<代码复用>

    这个从字面意思也是很好理解,继承财产什么的,继承就意味着可以得到很多长辈的东西嘛。对象的继承是一种IS-A的关系,如果两个对象A和B,可以描述为'B是A,那么B可以继承A'(其实我一开始也糊涂什么是isa,我现在的理解是用这样一句英语:cat is a animal.)猫是哺乳动物,就说明了猫与哺乳动物之间继承与被继承的关系。实际上,继承者可以完全被被继承者,反之则不成立。所以,我们在描述继承的IS-A关系时,是不能相互颠倒的。继承定义了如何相互关联,共享特性。继承的工作方式是,定义父类和子类或叫基类和派生类,其中子类继承父类的所有特性。子类不但继承了父类的所有特性,还可以定义新的特性。如果子类继承于父类,第一、子类拥有父类非private的属性和功能(从生物角度来说,你有些地方长的必然像父亲);第二、子类具有自己的属性和功能,可以扩展父类没有的(由于基因问题,可能有些地方和父亲不同);第三、子类还可以以自己的方式实现父类的功能,这就是所谓的方法重写,是一种接口复用(父子俩都会吃饭,但是你不喜欢父亲吃饭的方式的话,可以选择一种你喜欢的吃饭方式)。

        继承的好处:使的所有子类的公共部分都聚焦在父类,代码得到共享,避免了重复;另外,继承使得修改和扩展都变得容易。当然这也增加了耦合度,所以只有在两个类具备isa关系时才考虑用继承~

三.多态(利用指针的静态类型和动态类型可以不一致这个原理)

多态表示不同的对象可以执行相同的动作,但是通过它们自己的实现代码来执行。举个例子说明,假设有这样一对父子,父亲是非常有名的京剧艺术家,儿子也一直跟父亲学习,将来有一天子继父业。有一天,父亲突然生病无法上台,但是票都卖出去了,只有让儿子代替父亲去表演,反正化妆之后他娘估计也认不出,结果上台之后表演不比父亲差,很成功。但是看戏的人没看出什么差别。强调几点:1.在这里子类以父类的身份出现,儿子代表老子表演,以父亲的身份出现;(我说这句话的时候是不是想起了老师们经常强调的一句话?好吧,上课补充了我的睡眠而不是知识~ 实现多态的俩个条件:一个是virtual关键字,另一个就是指向子类对象的基类指针,这里就是基类指针)2.子类在工作时以自己的方式来实现,儿子模仿的再好也是模仿,儿子只能用自己理解的表现方式去模仿父亲的作品(这里就是说实际指向的是子类对象);3.子类以父类的身份出现时,子类特有的属性和方法不可使用(否则还不露出马脚~)儿子经过多年的学习,其实已经有了自己的创作,自己人的绝活,但在此时,代表父亲表演时,绝活是不能表现出来的。当然,如果父亲还有别的儿子会表演,也可以代表父亲去表演的话道理也是一样的。

   刚才说了实现多态的俩个条件:一个是virtual关键字,另一个就是指向子类对象的基类指针。多态的原理是当方法被调用时,无论对象是否被被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用,即虚方法是按照其运行时的类型而非编译时类型进行动态绑定调用的。


以上就是OO特性的简单介绍,下面是修改的第一个版本

#include<iostream>

using namespace std;

class Operator{
public:
	double GetResult(double num1,double num2,char op)
	{
		double result = 0;
		switch(op)
		{
			case '+':
				result = num1 + num2;
				break;
			case '-':
				result = num1 - num2;
				break;
			case '*':
				result = num1 * num2;
				break;
			case '/':
				result = num1 / num2;
				break;
		}
		return result;
	}
};

int main(void)
{
	int num1,num2;
	char op;
	Operator cal;

	cout << "please input num1" << endl;
	cin  >> num1;
	cout << "please input num2" << endl;
	cin  >> num2;
	cout << "please input the operator" << endl;
	cin >> op;
	cout << num1 << " " << op << " "  << num2 << " " << "=" << " ";
	cout << cal.GetResult(num1,num2,op) << endl;

	return 0;

}







© 著作权归作者所有

共有 人打赏支持
没有脚的大笨鸟
粉丝 5
博文 11
码字总数 5230
作品 0
浦东
程序员
私信 提问
设计模式之禅(第2版).epub

【下载地址】 本书是设计模式领域公认的3本经典著作之一,“极具趣味,容易理解,但讲解又极为严谨和透彻”是本书的写作风格和方法的最大特点。第1版2010年出版,畅销至今,广受好评,是该领...

winter730
05/16
0
0
设计模式笔录(二),设计模式有哪些

本人出道5年,学习、编程、再学习、再编程一路走过,只是在笔和纸留下些脚印,实感惭愧。现开始把自己学习到的心得,实践中的体会,一一贴在互联网上,大家互相学习、探讨,寻找一些技术朋友...

方旭
2011/03/31
0
0
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
0
0
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
228
2

没有更多内容

加载失败,请刷新页面

加载更多

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
26分钟前
0
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
44分钟前
13
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
45分钟前
1
0
Confluence 6 文档主题合并问答

在 Confluence 官方 前期发布的消息 中,文档主题在 Confluence 6.0 及其后续版本中已经不可用。我们知道你可能对这个有很多好好奇的问题,因此我们在这里设置了一个问答用于帮助你将这个主题...

honeymose
今天
2
0
java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部