当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

求一些处理高耦合性对象的设计模式优秀的C代码

更新:02-19 整理:39baobao.com
字体:

[求C语言投票系统源代码代码的注释]#include<stdio.h> #include<conio.h> struct hxr { int m; int point; } hxr[3]; //选票结构体 void main() { int i=0,j=0,k,temp=0; char x,y,z; struct hxr hxr[3]; for(...+阅读

我不熟悉My World Cup,我的理解是需要对象的高耦合,又需要对象设计上的相对隔离和清晰的模块化设计。这里谈一种常用的高耦合模型设计思想。

(1)首先,你需要理解C++接口的概念,就是一个纯虚类的定义,如:

#if _MSC_VER >= 1100

#define INTERFACE class

#else

#define INTERFACE interface

#endif

INTERFACE IHyEventHandler

{

public:

virtual RETCODE HYCALL OnEvent(ULONG ulEvent,void* pEventParam) = 0;

};

INTERFACE IHyEventSource

{

public:

virtual RETCODE HYCALL FireEvent(ULONG ulEvent,void* pEventParam)=0;

virtual RETCODE HYCALL RegisterHook(ULONG ulEvent,IHyEventHandler* pHandle)=0;

virtual RETCODE HYCALL UnRegisterHook(ULONG ulEvent,IHyEventHandler* pHandle)=0;

};

上述接口定义了一个事件接口,一个用于事件接收者,一个用于事件发起者

(2)高耦合的对象,你可以让每个对象实现你需要的接口(可以是多个),并且为了管理高耦合的对象,你需要一个对象管理者来管理这些对象(或管理对象的某些行为),如上述IHyEventSource 的 RegisterHook,UnRegisterHook,就是事件发起者,需要登记注册接收者及其它需要接收那些事件,这样在 IHyEventSource 的实现类(事件发起者)中能管理这些事件接收者及能够有选择的向事件接收者发出某种事件通知。

(3)通过特定的接口,就能实现对象间的高耦合需要,如上述事件接口,可让高耦合的对象都同时是接收者及发起者,这样,按你题意如果A对象的某个行为需要B对象数据,且需要变更数据,A只要向B(也可以同时对n个对象)对象发出行为开始及行为结束2个事件,B对象对行为开始就返回A需要的信息,行为结束B就更新相关信息。

(4)使用接口模型解决对象间高耦合问题,最大的好处是,实现耦合的接口及实现代码可以与对象类的其他实现部分无关,就是高耦合,但又高度模块化,甚至,你可以将耦合接口及实现封装在一个单独的DLL中,只要接口不变,你的DLL不会随对象类的变化而需要重新编译。

以上供你参考,这种编程方法的针对你应用的具体实现模型,主要是需要进行接口的高度抽象及定义,并要有一个创建及发现接口统一的编程模型。

本文地址:https://www.39baobao.com/show/29_43458.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

求基数排序c代码以前写过基数排序, 这是一种非比较性的排序 它的实现完全依靠的是正整数的特殊性质 不具有泛性,比如说你很难对一群对象排序,但基于比较的排序就可以 下面是源程序 这个排序实...

c语言初学者求下面输出杨辉三角的c语言代码的详细说明我和你写的不一样啊 #include int main() { int i,j; int a[10][10]; for(i=0;i<10;i++) //初始化第0行和对角线元素 { a[i][10]=1; a[i][i]=1;} for(i=2;i<10;j++) //公式...

求一个c语言的大数阶乘程序源代码希望对你有帮助—— //#include "stdafx.h"//VC++6.0要用这一行 #include "stdio.h" #include "math.h" #include "stdlib.h" char *FactorialLN(int n){ int i,j,k,tmp,len; char *...

面向对象的程序设计语言C编写函数完成指定三维数组#include<iostream> #define N 3 #define M 3 using namespace std; void reset(int a[][N]) { int i,j,t; for(i=0;i<N;i++) for(j=i;j<M;j++) { t=a[i][j]; a[i][j]=a[j][...

求C语言编写的表白程序要代码呃,你还不如用vbs,网上也有一堆教程和例子,很简单,随便看一下就知道怎么写了。1234567891011121314 DimmyName,herName,myNameAns,herNameAnsmyName="池早早"herName="欧浩辰"MsgBox...

求贪吃蛇C语言代码原发布者:西瓜萝卜饭lala #include #include #include #include #include #include #include #defineN21 charapple[2]; chartail[2]; char**snake=NULL; intscore=0; intlen...

求一些C语言小游戏的源代码谢谢学习一下数字版“拼图”代码写法:#include#include#include#include#includeint i, j, r, k; //i、j、r用于循环, k存放随机数值int m, n; // m、n是当前空位的下标int a[4][4...

求C语言写程序求源代码写一个简单程序给你参考。 用 C 写的第一个一个窗口程序 作为编程的开始,我们还是以一个Hello World来开始我们的学习之旅。代码如下: #include <stdio.h> void main() { prin...

面向对象程序设计期末大作业题目C语言面向对象程序设计 期末大作业题目 第1题:设计一个学生学籍管理系统 学生信息包括:姓名、学号、性别和英语、数学、程序设计、体育成绩。 从键盘输入数据,建立数据文件student.d...