设计模式简介
学习设计模式的目的:理解松耦合掌握面向对象设计模式掌握重构技法掌握GOF
可复用
手法:面向对象
本人下一步要学习架构搭建
抽象思维非常重要。
面向对象-》组件封装-》设计模式-》架构模式
面向对象
封装:隐藏内部代码
继承:复用现有代码
多态:改写对象行为
主要是变化导致
解决变化的复杂性:分解:分而治之。--》C语言,大问题分解成小问题。抽象:忽视非本质特征,去泛化和理想化对象模型。
下面是伪代码方式说明分解方式和抽象方式,对于后期需求变化修改产生的影响://分解方法 //Shape.h #pragma once //例子为伪码 //设计画图工具 //点 class Point { public: int x; int y; }; //线 class Line { public: Point start; Point end; Line(const Point& start, const Point& end) { this->start = start; this->end = end; } }; //矩形 class Rect { public: Point leftUp; int width; int height; Rect(const Point& leftUp, int width, int height) { this->leftUp = leftUp; this->width = width; this->height = height; } }; //有需求---圆形 //圆形 class Circle { };//分解的方法 //MainForm.cpp //分解的设计方法。 #include #include #include "Shape.h" using namespace std; class MainForm :public Form { private: Point p1; Point p2; //这个地方用的是类对象,非指针 vector lineVector; vector rectVector; //改变 vector circleVector; public: MainForm() { //... } protected: virtual void OnMouseDown(const MouseEventArgs& e); virtual void OnMouseUp(const MouseEventArgs& e); virtual void OnPaint(const PaintEventArgs& e); }; void MainForm::OnMouseDown(const MouseEventArgs& e) { p1.x = e.X; p1.y = e.Y; //... Form::OnMouseDown(e); } void MainForm::OnMouseUp(const MouseEventArgs& e) { p2.x = e.X; p2.y = e.Y; if (rdoLine.Checked) { Line line(p1, p2); lineVector.push_back(line); } else if (rdoRect.Checked) { int width = abs(p2.x - p1.x); int height = abs(p2.y - p1.y); Rect rect(p1, width, height); rectVector.push_back(rect); } //改变 else if (rdoCircle.Checked) { Circle circle(); circleVector.push_back(circle); } //... this->Refresh(); Form::OnMouseUp(e); } //界面被刷新时被调用 void MainForm::OnPaint(const PaintEventArgs& e) { //针对直线 for (int i = 0; i < lineVector.size(); i++) { e.Graphics.DrawLine(Pens.Red, lineVector[i].start.x, lineVector[i].start.y, lineVector[i].end.x, lineVector[i].end.y); } //针对矩形 for (int i = 0; i < rectVector.size(); i++) { e.Graphics.DrawRectangle(Pens.Red, rectVector[i].leftUp, rectVector[i].width, rectVector[i].height); } //改变 //针对圆形 for (int i = 0; i < circleVector.size(); i++) { e.Graphics.DrawCircle(Pens.Red, circleVector[i]); } //... Form::OnPaint(e); }
//抽象方法---可复用 //Shape_abstract.h #pragma once class Shape { public: virtual void Draw(const Graphics& g) = 0; //虚析构函数作用:子类通过多态释放时,子类的析构函数才能被正确的调用到 virtual ~Shape() {} }; class Point { public: int x; int y; }; //所有继承都推荐用public class Line : public Shape { public: Point start; Point end; //构造函数 Line(const Point& start, const Point& end) { this->start = start; this->end = end; } //实现自己的Draw,负责画自己 重写父类虚函数 virtual void Draw(const Graphics& g) { g.DrawLine(Pend.Red, start.x, start.y, end.x, end.y); } }; class Rect :public Shape { public: Point leftUp; int width; int height; Rect(const Point& leftUp, int width, int height) { this->leftUp = leftUp; this->width = width; this->height = height; } //实现自己的Draw, 负责画自己 virtual void Draw(const Graphics& g) { g.DrawRectangle(Pens.Red, leftUp, width, height); } }; //改变 class Circle::public Shape { public: //实现自己的Draw, 负责画自己 virtual void Draw(const Graphics& g) { g.DrawCircle(Pens.Red, ...); } }; //抽象方法---可复用 //MainForm_abstract.cpp #include #include #include "shape_abstract.h" using namespace std; class MainForm : public Form { private: Point p1; Point p2; //针对所有形状----注意,这个地方用的是Shape指针 //这里面我们需要使用多态性。可能是Line Rect类型。 //如果不用指针会造成对象切割,切割成小对象…会有问题 //必须要房Shape指针 vector shapeVector; public: MainFor() { //... } protected: virtual void OnMouseDown(const MouseEventArgs& e); virtual void OnMouseUp(const MouseEventArgs& e); virtual void OnPaint(const PaintEventArgs& e); }; void MainForm::OnMouseDown(const MouseEventArgs& e) { p1.x = e.X; p1.y = e.Y; //... Form::OnMouseDown(e); } void MainForm::OnMouseUp(const MouseEventArgs& e) { p2.x = e.X; p2.y = e.Y; if (rdoLine.Checked) { //此处不能放栈对象,在MainForm的析构函数中要复制释放shapeVector中存放的堆对象指针 shapeVector.push_back(new Line(p1, p2));//这个地方貌似有内存泄漏吧??? } else if (rdoRect.Checked) { int width = abs(p2.x - p1.x); int height = abs(p2.y - p1.y); shapeVector.push_back(new Rect(p1, width, height)); } //改变---后面使用工厂模式可以消掉 else if (...) { //... shapeVector.push_back(...); } //... this->Refresh(); Form::OnMouseUp(e); } void MainForm::OnPaint(const PaintEventArgs& e) { //针对所有形状 for (int i = 0; i < shapeVector.size(); i++) { shapeVector[i]->Draw(e.Graphics);//多态调用,各负其责 } //... Form::OnPaint(e); }
//用户有修改需求
软件设计的目标---》复用。
软件设计的金科玉律---复用。
身为中国人,不吃饭也要让孩子知道这些常识,建议点赞收藏身为中华儿女,不吃饭也要让孩子知道这些常识,建议点赞收藏。我国一共有多少个汉字?2012年中华字库工程在我国启动。据统计,中国汉子约有10万个。我国的国球是乒乓球。1959年,中国
月子中心真的有必要去吗我认为去月子中心是有必要的。孕期一直在去月子中心和请月嫂两者之间纠结,觉得去月子中心一个月的钱可以请三四个月的月嫂,但考虑到市面上的月嫂水平参差不齐,做不到完全信任,而且月嫂不仅要
何为少儿推拿?中医教会你带孩子推拿,应该注意哪些问题许多父母听说了少儿推拿却不知何为少儿推拿?少儿推拿的目的是什么?少儿推拿是否有效?能不能学少儿推拿?若带孩子推拿,应注意哪些问题?相信不少父母都会遇到这类烦恼,下面我们首先来看看何
8款爆炸盐评测洗衣去污网红神器,真有那么神奇吗?奶渍辅食渍油渍泥土渍水果渍彩笔渍给宝宝洗衣服,各类污渍如何能洗得彻底漂得干净?此前,笨爸爸曾针对宝宝洗衣液和普通洗衣液展开过对比评测。结果发现,二者的综合表现差别并不是很大。近期以
Steam史低11款精品游戏推荐刺客信条特惠来袭大家好,国庆宅家里不用上班还是非常爽的,更爽的是非常多的史低游戏来袭。六英寸之下的领地SupralandSixInchesUnder国区史低42。0元(40。0)阿区价格6。46元
抄亲子故事鼻子不见了抄书第二天,希望一天比一天有进步!选了姑娘的一本亲子故事书的一个小故事鼻子不见了,里面讲述了了小新不讲卫生,经常用已经长长的脏指甲抠鼻子,导致鼻子离家出走了。从这个小故事里告诉孩子
做个闲人,青山结庐,白发归隐长假,前三日还是盛夏的样子,可是4号以后,气温却暴跌二十度,一夜之间,宛如两个季节。晚上散步,发现不知不觉秋意已浓了,这样凉意袭人的深秋夜晚十分喜欢。今早出去买菜,看到路边不知第几
五天上涨5,黄金迎来四季度开门红仅仅五个交易日时间,黄金上涨5白银上涨14铂金上涨9钯金上涨11。从9月份的最后几个交易日至今,以黄金为代表的贵金属市场出现了出人意料的蹿升行情,为第四季度迎来了开门红。截至目前,
天上有个太阳最不像假期的假期依旧继续着,不急不慢,不徐不疾,不愠不燥。清晨,我抖抖精神,准备恢复我的长跑,雄心勃勃人生豪迈,大不了重头再来。这好像是一首歌的歌词。晨曦拉长树的影子,绿草含露微笑
好用实用而且还不贵今天咱整几个十一郊游利器一年一度的十一黄金周终于到了。说到难得的7天假期,很多朋友都希望出去好好玩玩。其实这两年大家的郊游方式,变化还是挺大的,很多朋友不再专注白天去景点,晚上农家乐,而是更看重短途的郊游
伶仃洋上庆国庆十月四日,珠海游客喜气洋洋的手举五星红旗,在伶仃洋上庆国庆,祝愿伟大的祖国繁荣昌盛,国泰民安。743年前,民族英雄文天祥被俘押解途中写的过零丁洋惶恐滩头说惶恐,零丁洋叹零丁。古谁死
惊蛰前后,建议中老年人吃早春6宝,季节性强,早吃早受益人不管走到哪一步,总得找点乐子,想一点办法。是的,美食就是我找的乐子,想的办法!小谈食刻和你一起认真对待吃下的食物!导读这周六也就是3月5日将迎来二十四节气的第三个节气,惊蛰。惊蛰
大多数慢性病,其实都是血液病人是一个能量体,无形的能量叫做气,有形的能量,便是血。血液有形有相,它是很容易看到,能容易理解的。现代医学定义的大多数慢性病,本质上都是血液病。老百姓上医院做体检,第一件事就是验血
这个病来时静悄悄,可不只找老年人一般人的骨质疏松往往无声无息,患者往往等到骨折才发现。骨质疏松症是指多种原因引起的单位体积骨质总量减少骨组织微细结构改变和破坏为特征的全身性骨骼病变。一般来说,骨质疏松人群的骨折好
市值缩水80,用户从年轻人变成老年人,陌陌为什么越来越凉?文Dong审核子扬校对知秋作为昔日交友软件市场中的佼佼者,陌陌在一众用户群体中有着相当高的知名度。尤其是互联网时代的到来,在一定程度上改变了国人们的交由方式,线上交由成为一种新的流
新的血压标准或被发现,不再是12080?提醒老年人对照自查一下生活节奏越来越快,咱们现在的养生意识也在逐渐提高,选择更加适宜的养生食材,来提高自己对身体器官的保养力度,现在大家对于慢性疾病尤其是三高疾病以更为关注,稍不注意会危害心脑血管健康。
技术获评国际领先!TCL宣告5年内全面普及新风空调南方记者获悉,近日,TCL两项新风空调技术获评国际领先,分别是基于空气品质智能控制的大新风量高舒适性新风空调技术研究及应用和新型高效变频控制器关键技术研究及其产业化。TCL新风空调
关于孩子的教育,如何正面管教呢什么是正面管教正在读一年级的晴晴最近表现出明显的叛逆特点。妈妈意识到,即将7周岁的晴晴提前进入了成长叛逆期。在这段时间里,母女间的关系剑拔弩张,妈妈还想像从前那样对晴晴发号施令。而
23个国际品牌首次入驻,奢侈品的海南机会中国国际消费品博览会(CICPE)即将在海南举办,海南将继续领跑国际旅游消费中心定位。为提升当地消费刺激国内旅游业以及鼓励消费者在境内消费。海南岛催生了一个免税天堂,希望能满足人们
难忘小东江的晨雾三年前比这晚些时候,我和几位战友结伴出游湖南广西等地,一览袓国的大好河山,在湖南彬州境内的小东江,烟雨中雾漫小东江之美,让我们惊羡不已,以至回来几年了,心间蔓延出的情感,仍弥漫成一
晚上起夜和不起夜相比较,哪个健康?医生给出解释睡眠对身体来说是非常重要的,只有保持规律的作息才能维护身体的健康,现在因为生活节奏不断加快,压力越来越大,很多人出现了熬夜的情况。长期熬夜,睡眠时间不足,会诱发体内脏器排毒失调,给
血糖新标准已公布,不是3。96。1,是这个范围,或许你血糖并不高大多数人认为糖尿病是老年人才会得的一类病,自己还年轻,并不会患上糖尿病,因此对自身的血糖水平不在意,最终血糖水平升高发展为糖尿病,错过最佳治疗时期。夏方养生指南现如当代人的夜生活越