分享
 
 
 

[用设计模式锻炼C#系列]之Singleton、Bridge

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

-------------------------------------声明-------------------------------------

国内普遍接触.NET大约是2001十一月份,Microsoft正式发布VS.NET后.(记的不太清楚了)

虽然,在这之前D版的VS早就有了,偶当时经不住诱惑.

曾经一段时间阅读了大量的相关书籍.

.NET带来了大量至少说在WINDOWS系列平台上新的运行和开发技术集.

特别是号称互连计算技术又一浪潮的WebService =Soap(HTTP+新数据存储格式XML)+WINDOWS系统支持+WebService服务端和客户端(不同于传统的意义)API集

在架构方面,就个人意见,可以说吧,WebService是可以代替Microsoft以前的基于DCOM系

统架构.

就拿D-DBS的构架来说,XML数据格式的统一带来了莫大的好处.

在基于DCOM的解决方案中,DBS->网络->DBS的过程,数据要不断的转化.

而且数据流往往受路由情况的影响.

不过,我感觉WebService的开发支持不够多变.也许是我对COM技术

的钟情吧.虽然很多的MS针对体系的开发方案偶没接触过.

然后就是开发平台的巨大改变.

首先是CLR的出现,使得对商业系统很重要的移植性好象有了希望.正因为CLR,偶学了一

段时间,偶又把重心移走,偶觉得即使给开发的程序配置了全局缓冲.还是慢.不象NATIVE代

码那样流畅.

偶没搞过JAVA,不过好象出名的慢.

而另一令世人注目的是:C#

偶觉得:C#的确是一门很先进的语言.很强大.

对比于其它的传统语言c、c++,是很纯的面向对象语言.

对面向对象开发的理念有大量的原生语法和语义支持. 这一点偶真的很欣赏

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

不象C的过程性、C++的多典范,像JAVA,不过我觉得绝对比

JAVA强大(JAVA爱好者不要骂啊!).

偶在2001底,以本人的知识,写了一篇"有儿戏嫌疑"的《基于.NET开发和运行平台,架构校园信息系统》,前段时间挖出来,发于CSDN引来很多的鸡蛋和石头,当然也有人表示理解.

很长时间,没用.NET了,看到小百合。NET版好象有很多刚接触。NET的同学,偶想:偶当时学习的时候都是自己看书,好辛苦.这里将自己收藏的C++设计模式一系列的文章,用C#改写

一方面方便同学,另一方面自己也重温一下.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

偶并不会按模式的分类循序贴出.改写一篇算一篇,贴出也是不定期的.有时间和必要详细注释的地方,偶会注释的.

--------------------------------------------------------------------------------------------------------

名称:Singleton

中文名:单件

类型:创建型

简介:一般用于在全局范围内,保证class对象的唯一性.

对于这个问题,最好的解决方案是利用class自身的

特性来实现,而不是对客户提出要求,那缺乏安全性.

程式:

[C#]

// created on 2003-3-11 at 15:32

using System;

class _singleton{

private _singleton(){}

public static _singleton createinstance(){

if(singleton_instance_ref == null){

singleton_instance_ref = new _singleton();

}

return singleton_instance_ref;

}

private static _singleton singleton_instance_ref = null;

}

class _singleton_test{

public static void Main(){

_singleton ref_singleton = _singleton.createinstance();

_singleton ref_singleton_ = _singleton.createinstance();

if(ref_singleton.Equals(ref_singleton_))

Console.WriteLine("Hello,we ref the same space in the memory");

}

}

点评:

1.充分利用:static和private的特性

public和static保证createinstance产生对象的全局性.

2.private和static修饰singleton_instance_ref确保了它能且只能被class

内部的static成员函数调用.安全性得到保证.

3.singleton_instance_ref的对类的依赖和一定的全局性,保证了优于全局变量的

解决方案.(事实上C#并不支持C、C++等语言中的传统概念上的全局

变量了.).因为C#一切以类为中心.

4.对象的生成具有即使性,在支持全局变量的C++之中,这种方案明显优于定义全局变量

. 5.个人觉得C#将数据类型明确划分为引用和数值型(亦可动态分配),的确非常的合理.关于引用,可以说是现代C++明显的应用趋势.它避免了指针的不方便, 继承了对于大对象拒绝值传递的特性.

6.垃圾回收机制能力也在这里表现出优势.

扩展:

1.在本程式中紧有的if语句里,你是否可看出,这里存在很大的设计弹性.

2.对于static,C#加入了不可修饰的静态构造子的用法.那是传统的具有面向对象

特性的语言不具有的特征.

---------------------------------------------------------------------------------------------------

名称:Bridge

中文名:桥接器

类型:结构型

简介:一般用于将实现和抽象的接口分离.

以保证系统的低耦合性.这样的系统就

便于扩展.它淘汰了单纯的实现继承在

多功能系统中死板的解决方案.而且由于

Bridge本身的特性,它很易于结合其它的

模式.

程式:

[C#]

// created on 2003-3-12 at 9:08

using System;

class abstraction{

public void _operation(implementor imp_ptr){

if(imp_ptr!=null) imp_ptr.implementor();

}

}

interface implementor{

void implementor();

}

class concreteiml_a:implementor{

public void implementor(){

Console.WriteLine("I am _a. I hava been implemented.");

}

}

class concreteiml_b:implementor{

public void implementor(){

Console.WriteLine("I am _b. I have been imlemented.");

}

}

class ts_bridge{

public static void Main()

{

abstraction _bridge = new abstraction();

implementor impl_a = new concreteiml_a();

implementor impl_b = new concreteiml_b();

_bridge._operation(impl_a);

_bridge._operation(impl_b);

}

}

点评:1.首先它使用了C#对面向对象设计理念的原生支持interface.

C#中,interface默认是public继承.且继承之class对它定义

接口函数的实现必须是public,它不支持修饰.

对于这个问题,本人认为,从语法上说道理,不如从语义上理解,

因为interface目的是用于继承class的实现的,若支持声明为

private显然是不合适的,同理于默认的public继承.

C#中的interface还支持属性、索引等.

2.本模式一个核心的问题:它实现的支持同于C++中的对于虚函数机制

的支持,即动态联编.不谈这种机制是否易于理解,这里绝对是一个

值得任何程式爱好者探讨的地方,这里含有的真的是精妙的设计.

3.引用和数值类型的特性.

扩展:

1.你会发现这里的结构是简单的,体现在class级结构层次少和成员关系简单.

事实上,由于Biridge的低耦合,结合如抽象工厂(Abstract Factory)来

控制concreteimplmentor的行为是最长见的.

2.C#的interface与abstract class的区别.

---------------------------------------------------------------------

声明:本程式重在演示C#基本用法

不考虑在实际环境中应用带来

其它问题的情况.

如:多线程.

---------------------------------------------------------------------

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有