设计模式 to kj501
2008-04-09 04:04:56来源:互联网 阅读 ()
kj501兄
当年在这里答应你写设计模式的文章
现在过很长时间了才写出来不好意思
我记得你喜欢上这里的 看到后就到我那里去看更多的好了
每天晚上写一点
过几天再研究数据库
1
什么是设计模式
设计就是解决方案
设计模式就是把一些常用的设计文档化
2
开始入门
最开始的当然是那经典的MVC了
在每一本设计的书中都会看到
原因是MVC很实用
MVC M模型(对象) V它的视图 也就是界面部分 C控制 也就是操作方法
MVC最先在SMALLTALK中提出 由于把界面与控制分离 所以修改一部分 不会影响其它部分
如修改界面的实现 不需要你修改业务逻辑
修改业务实现 不需要同时修改界因 所以被广泛使用
代码的维护也方便 因为V 与C是独立的 增加功能时都需要修改 分离后减少了耦合性 所以后面修改代码更方便
VC的D/V(文档视图结构)也是MVC的一种体现
这个帖子已被 无双 于 2003-11-09 19:54:50 编辑
2 接口与继承
接口就是定义了一个统一的功能 功能的具体实现由对应的实现者实现
如你调用一个方法 就知道这个方法会返回什么结果 无论是哪个类的对象都一样 你不必知道调用的是什么类的方法
如你想调用一个画菜单接口 那么就知道调用它一定会在屏幕上画出菜单 而不论现在是在UNIX或是在WINDOWS上 也不必知道现在是使用什么库来实现
如果用过JAVA那就会知道JAVA中有INTERFACE方法 它定义了一个操作的接口 其它类想实现那个功能时可以使用impletes实现它的功能 在JAVA中事件的响应等都是这样实现的
在C 中 接口是使用抽象类来实现
继承是共享数据与代码的一个方法 用于在两个有ISA关系的类间
ISA就是 是一个 如笔记本电脑ISA(是一个) 电脑 那它就有电脑的属性与方法
但是它是笔记本 那会有自己的特征 这些特征就放在子类中实现 电脑的特征就在电脑类中实现 这样就不会要笔记本电脑中还实现电脑的功能 有重复的代码了
另外子类中有些方便会改变 这时子类需要定义自己的接口代替父类中同名接口
在C 中 想让子类接口代替父类接口应该把对应的接口定义为virtual
如下
代码
[code:1:68b591b24c]#include <iostream>
using namespace std;
struct A{
void t(){
cout<<" A"<<endl;
}
virtual~A(){
cout<<" ~A"<<endl;
}
};
struct B:public A
{
virtual void t(){
cout<<" B"<<endl;
}
~B(){
cout<<" ~B"<<endl;
}
};
struct C:public B
{
void t(){
cout<<" C"<<endl;}
~C(){
cout<<" ~C"<<endl;
}
};
main(){
A a;
B b;
C c;
cout<<"first use A* to call t()"<<endl;
A*p=&
p->t();
p=&
p->t();
p=&
p->t();
cout<<"now use B* to call t()"<<endl;
B* v=&
v->t();
v=&
v->t();
cout<<"finally call destructor"<<endl;
return 0;
}[/code:1:68b591b24c]
[b:68b591b24c]输出如下[/b:68b591b24c]
代码
first use A* to call t()
A
A
A
now use B* to call t()
B
C
finally call destructor
~C
~B
~A
~B
~A
~A
可以看到virtual从它定义的级别开始起作用
后面的析构是子类析构过程中调用父类析构
在继承中把析构函数定义成virtual的原因是
在使用父类指针指向子类时 处理完后可以正确的调用对应的析构函数
如下
代码
[code:1:68b591b24c]#include <iostream>
using namespace std;
struct A{
void t(){
cout<<" A"<<endl;
}
~A(){
cout<<" ~A"<<endl;
}
};
struct B:public A
{
void t(){
cout<<" B"<<endl;
}
~B(){
cout<<" ~B"<<endl;
}
};
main(){
A*p= new B();
delete p;
return 0;
} [/code:1:68b591b24c]
显示为
代码
~A
第二次修改A中
~A(){
改成
virtual ~A(){
后
代码
~B
~A
可以看到资源被正确释放
接口与继承的比较
接口中并没有实现代码 它只是说明这个接口会有什么功能 如何提供这个功能是实现这个接口的类的任务
继承中是子类继承代码 也就是子类共用父类的代码实现父类的功能
针对接口编程 而不是针对实现编程
好处是
1 客户不必知道他们使用对象的特定类型 而只要对象有客户期望的接口
2 客户不必知道他们使用的对象是使用什么类来实现的 只须知道定义接口的抽象类
这样就减少了子系统实现间的依赖关系
--------------------
今天你微笑了吗:)
上面写到接口与继承
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:对CMM的认识
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash