head first 第一章学习
来源:互联网 发布:数据采集卡企业 编辑:程序博客网 时间:2024/05/19 22:01
head first 第一章主要讲了设计模式的两个重要原则:
1 把类中可变的部分拿出来进行封装,这也符合ocp原则,设计类的重要思想哈
2 对接口编程,而不是对实现编程。 对接口编程实际上就是上一条封装的那部分,
封装的类就是接口类哈。
虽然head first的实现是用java写的,但咱可以给改成c++的哈 ,代码如下
class duck
{
public:
duck();
virtual ~duck();
public:
//这个是不变的
void swimming();
//把fly的行为委托给接口
virtual void ducktofly();
//这个方法可以动态的改变duck对象的行为
void setFlyBeavior(FlyBeavior *pFly);
public:
//行为接口,只写一个fly
FlyBeavior *m_pFly;
};
//会飞的鸭子
class duck11 : public duck
{
public:
duck11();
~duck11();
};
//不会飞的鸭子
class duck22 : public duck
{
public:
duck22();
~duck22();
};
duck::duck()
{
}
duck::~duck()
{
}
void duck::swimming()
{
}
void duck::setFlyBeavior(FlyBeavior *pFly)
{
m_pFly = pFly;
}
//让接口去处理,我不关心具体的实现,即子类的行为
void duck::ducktofly()
{
if (m_pFly != NULL)
{
m_pFly->Fly();
}
}
duck11::duck11()
{
m_pFly = new canFly;
}
duck11::~duck11()
{
if (m_pFly)
{
delete m_pFly;
}
}
duck22::duck22()
{
m_pFly = new noFly;
}
duck22::~duck22()
{
if (m_pFly)
{
delete m_pFly;
}
}
//接口实现
class FlyBeavior
{
public:
virtual void Fly();
};
//飞的行为也有不同,简单的有的会飞,有的不会
class canFly : public FlyBeavior
{
public:
void Fly();
};
class noFly : public FlyBeavior
{
public:
void Fly();
};
void FlyBeavior::Fly()
{
printf("this is bass flybeavior fly/n");
}
void canFly::Fly()
{
printf("i can fly/n");
}
void noFly::Fly()
{
printf("i no fly/n");
}
int _tmain(int argc, _TCHAR* argv[])
{
duck *pduck1= new duck11;
pduck1->ducktofly();
duck *pduck2 = new duck22;
pduck2->ducktofly();
//动态改变鸭子的行为状态
pduck2->setFlyBeavior(new canFly);
pduck2->ducktofly();
getchar();
return 0;
}
- head first 第一章学习
- <Head First Java>学习笔记--第一章:基本概念
- Head first HTML&CSS ---[学习笔记第一章]
- Head First Java第一章
- Head First SQL 第一章
- JAVA Head First 第一章
- 【PMP】Head First PMP 学习笔记 第一章 引言
- Head first python 之第一章初识python列表学习
- Head First Python第一章:列表
- Head First学习笔记
- head first学习法
- Head First 设计模式第一章 ----策略模式
- Head First设计模式--第一章-策略模式
- Head First Python 第一章 看书心得
- 关于使用vs2012学习《head first c# 第三版》第一章中遇到问题及解决方案
- head first html5 学习笔记
- 《Head First Python》学习笔记
- <<head first java>>学习笔记
- Form1.Designer
- matlab对数据进行归一化方法
- Cookie的运用
- DIY 图文装机
- 远程访问数据库
- head first 第一章学习
- VC子窗口与父窗口通信
- linux下php+oracle环境
- 使用脚本语言和IE右键菜单
- 删除Oracle中安装的perl地方法
- 世界上最珍贵的是什么
- SVN用户及权限配置
- 加密机制
- php log class