标题: [原创]设计模式研究
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2003-11-9 19:01  资料  个人空间  主页 短消息  加为好友 
过几天再研究数据库
1
什么是设计模式
设计就是解决方案
设计模式就是把一些常用的设计文档化

2
开始入门
最开始的当然是那经典的MVC了
在每一本设计的书中都会看到
原因是MVC很实用
MVC M模型(对象) V它的视图 也就是界面部分 C控制 也就是操作方法
MVC最先在SMALLTALK中提出 由于把界面与控制分离 所以修改一部分 不会影响其它部分
如修改界面的实现 不需要你修改业务逻辑
修改业务实现 不需要同时修改界因 所以被广泛使用
代码的维护也方便 因为V 与C是独立的 增加功能时都需要修改 分离后减少了耦合性 所以后面修改代码更方便
VC的D/V(文档视图结构)也是MVC的一种体现





不要问我结果 我只研究过程与思路
无双客栈
顶部
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2003-11-9 19:42  资料  个人空间  主页 短消息  加为好友 
2 接口与继承
接口就是定义了一个统一的功能 功能的具体实现由对应的实现者实现
如你调用一个方法 就知道这个方法会返回什么结果 无论是哪个类的对象都一样 你不必知道调用的是什么类的方法
如你想调用一个画菜单接口 那么就知道调用它一定会在屏幕上画出菜单 而不论现在是在UNIX或是在WINDOWS上 也不必知道现在是使用什么库来实现
如果用过JAVA那就会知道JAVA中有INTERFACE方法 它定义了一个操作的接口 其它类想实现那个功能时可以使用impletes实现它的功能 在JAVA中事件的响应等都是这样实现的
在C++中 接口是使用抽象类来实现

继承是共享数据与代码的一个方法 用于在两个有ISA关系的类间
ISA就是 是一个 如笔记本电脑ISA(是一个) 电脑 那它就有电脑的属性与方法
但是它是笔记本 那会有自己的特征 这些特征就放在子类中实现 电脑的特征就在电脑类中实现 这样就不会要笔记本电脑中还实现电脑的功能 有重复的代码了
另外子类中有些方便会改变 这时子类需要定义自己的接口代替父类中同名接口
在C++中 想让子类接口代替父类接口应该把对应的接口定义为virtual
如下
CODE

#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=&a;
p->t();
p=&b;
p->t();
p=&c;
p->t();

cout<<"now use B* to call t()"<<endl;
B* v=&b;
v->t();
v=&c;
v->t();
cout<<"finally call destructor"<<endl;
return 0;
}

输出如下
CODE

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

#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

~A



第二次修改A中
~A(){
改成
virtual ~A(){

CODE

~B
~A



可以看到资源被正确释放










接口与继承的比较
接口中并没有实现代码 它只是说明这个接口会有什么功能 如何提供这个功能是实现这个接口的类的任务
继承中是子类继承代码 也就是子类共用父类的代码实现父类的功能

针对接口编程 而不是针对实现编程
好处是
1 客户不必知道他们使用对象的特定类型 而只要对象有客户期望的接口
2 客户不必知道他们使用的对象是使用什么类来实现的 只须知道定义接口的抽象类
这样就减少了子系统实现间的依赖关系





不要问我结果 我只研究过程与思路
无双客栈
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2003-11-9 22:02  资料  个人空间  短消息  加为好友 
QUOTE
针对接口编程 而不是针对实现编程

思想好。但是实现过程有些困难。
1 程序员的素质和经验。针对接口编程的要求更高
2 需要时间
假如一项工程时间很紧,为了赶进度,自然无法做到这点。所以这些工作需要平时积累。
毕竟公司有忙有闲,闲时就可以把一些常用的功能用针对接口编程实现

所以不能指望临时抱佛脚 grin.gif





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2003-11-9 23:29  资料  个人空间  主页 短消息  加为好友 
差不多 如果时间紧的话 那么几千是想到什么就写什么 很难写设计





不要问我结果 我只研究过程与思路
无双客栈
顶部
Bell
LU天使
Rank: 4
三军总司令



UID 1782
精华 9
积分 699
帖子 1361
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 50
注册 2003-11-6
来自 MIT
 
发表于 2003-11-9 23:59  资料  个人空间  主页 短消息  加为好友 
是啊,针对借口编程是很重要的。
接口里只有那些抽象的方法和没有实现的。
然后再去做一个实现接口的类。

初一看标题,我以为是做“接口”(就是我原来用汇编做的东西)呢。 smile.gif

这个论题好,拿到其他网站上去推广、交流一下啊。

<另>现在我总算会用管理工具了 grin.gif





Ensemble à tout jamais!
user posted imageuser posted image
顶部
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2003-11-10 08:39  资料  个人空间  短消息  加为好友 
[QUOTE]现在我总算会用管理工具[CODE]
恭喜,我也是好不容易才会用的 awkard.gif


哈哈 一样一样
我昨天琢磨了一下午才会的 huh.gif





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
weihello
LU幼天使
Rank: 2



UID 1227
精华 1
积分 29
帖子 53
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 20
注册 2003-10-31
 
发表于 2003-11-10 15:29  资料  个人空间  短消息  加为好友 
QUOTE(无双 @ 2003-11-09 19:01:37)
过几天再研究数据库
1
什么是设计模式
设计就是解决方案
设计模式就是把一些常用的设计文档化

设计并非解决方案。解决方案不过是设计模式的一个组成部分

设计模式更不是设计,同时也非设计的文档化。

设计模式是一种以模式语言描述的设计的核心。是高于设计的一种抽象,他不仅仅包括解决方案,个人认为最重要部分是意图。

设计不过是设计模式的一个具体应用而已。

模式中的解决方案不过是一个模版,并不描述具体的设计和实现。

亚历山大: 设计模式是描述的一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。

模式是一种语言。





生活需要点糖

http://www.erproad.org
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
qinxj
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 1117
精华 1
积分 166
帖子 328
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2003-10-29
 
发表于 2003-11-10 15:47  资料  个人空间  短消息  加为好友  添加 qinxj 为MSN好友 通过MSN和 qinxj 交谈
我本来也想这样声明的,非常赞同weihello的说法:
设计模式是一些大师们总结出来的框框,大家熟悉了这些设计模式之后就可以利用它们为你的系统服务,减少一些重复的设计方法的考虑!

希望以后大家对一些好的设计模式进行分析,用最最易懂的例子来说明这个模式的功能。希望大家都能对每一个设计模式了然于胸,这样子大家的设计水平就上升到了一定的高度。

多用些时间在设计上,少用些时间在维护上!





合久必分、分久必和!
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2003-11-10 15:53  资料  个人空间  主页 短消息  加为好友 


那大家一起来学习吧

我想好的模式可以减少自己的开发与维护工作量





不要问我结果 我只研究过程与思路
无双客栈
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
Bell
LU天使
Rank: 4
三军总司令



UID 1782
精华 9
积分 699
帖子 1361
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 50
注册 2003-11-6
来自 MIT
 
发表于 2003-11-10 17:45  资料  个人空间  主页 短消息  加为好友 
?!
不对啊!!!
怎么回事?
我明明是引用 三毛姐姐的话,怎么成编辑她的帖子了?


三毛姐姐,我不是故意的啊!!! cry_smile.gif cry_smile.gif cry_smile.gif
别生气!!
看来我还是不会用 ...





Ensemble à tout jamais!
user posted imageuser posted image
顶部
[广告] 土人
threehair
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14


UID 27
精华 78
积分 3034
帖子 5716
活跃指数 0
LU金币 2093 个
LU金条 0 个
阅读权限 200
注册 2003-9-17
 
发表于 2003-11-10 18:01  资料  个人空间  短消息  加为好友 
QUOTE(cheyenne @ 2003-11-10 17:45:23)
?!
不对啊!!!
怎么回事?
我明明是引用 三毛姐姐的话,怎么成编辑她的帖子了?


三毛姐姐,我不是故意的啊!!!  cry_smile.gif  cry_smile.gif  cry_smile.gif
别生气!!
看来我还是不会用 ...

没关系,哦不介意的。哦刚开始也不习惯,老把引用点成编辑 grin.gif





╭⌒╮ ╭⌒╮╭⌒╮
╱◥███◣╭╭ ⌒╮
︱田︱田   田|
关门,上锁,钥匙已生锈。
世事静方见,人情淡始长!
顶部
[广告] 土人
Bell
LU天使
Rank: 4
三军总司令



UID 1782
精华 9
积分 699
帖子 1361
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 50
注册 2003-11-6
来自 MIT
 
发表于 2003-11-10 18:10  资料  个人空间  主页 短消息  加为好友 
还是咱们三毛姐姐好啊 !!!

wub.gif





Ensemble à tout jamais!
user posted imageuser posted image
顶部
[广告] 土人
 



当前时区 GMT+8, 现在时间是 2008-8-22 13:38
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.111409 second(s), 7 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver