首页 相关文章 无废话C#设计模式之十二:Bridge

无废话C#设计模式之十二:Bridge

  本系列文章将向大家介绍一下C#的设计模式,此为第十二篇文章,相信对大家会有所帮助的。废话不多说,继续来看。

  意图

  将抽象部分与实现部分分离,使它们都可以独立的变化。

  场景

  还是说我们要做的网络游戏,多个场景需要扩充的问题我们已经采用了创建型模式来解决。现在的问题就是,不仅仅是游戏场景会不断扩充,而且游戏的模式也在不断扩充。比如,除了最基本的战斗模式之外,还会有道具模式,金币模式等。

  对于这种在多个维度上都会有变化或扩充需求的项目来说,可以考虑引入桥接模式。或许你会说,不管是什么场景,不管什么模式,都可以是抽象场景的一个子类,但是,如果这样的话,4个场景和3种模式就会产生12个子类,而10个场景5种模式就会有50个子类。一味进行继承并不是什么好方法,桥接模式的思想是把继承转化为组合,把乘法(10*5=50)转化为加法(10+5=15)。

  示例代码

[ 查看全文 ]

2016-02-19 标签:
  • 本系列文章将向大家介绍一下 C#的设计模式 ,此为第十三篇文章,相信对大家会有所帮助的。废话不多说,继续来看。 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 场景 在设计网络游戏的武器系统时,开始并没有考虑到武器的强化和磨损。之后,策划人员说希望给游戏增加强化系统和修理系统,那么我们的武器类型就需要对外提供强...[ 查看全文 ]
  • 状态模式主要解决当控制一个对象状态的转换的条件表达过于复杂的情况,使得状态的转换不依赖于整体的操作。本文将通过一个具体的例子说明状态模式的应用。假设下面一个场景:      一个新任务提交后,先是收集数据,数据收集完成后等等分配一台机器,分配到机器后就可以将此任务部署至此机器后就可以通知相关模块开始工作。 先对此场景做分析如下:    一个任务共分四个步...[ 查看全文 ]
  • 从重构的角度学习bridge设计模式 Bridge模式是一个在实际系统中经常应用的模式。它最能体现设计模式的原则针对接口进行编程,和使用聚合不使用继续这两个原则。 !-- frame contents -- !-- /frame contents -- 由于我们过分的使用继续,使类的结构过于复杂,不易理解,难以维护。非凡是在Java中由于不能同时继续多个类,这样就会造成多层继续,维护更难。 Bridge模式是解决多...[ 查看全文 ]
  • 本文目的:根据近期开发的C#软件,对于软件的启动设计谈谈我的心得。 如下代码是我设计的启动软件的类,应用程序入口也是在这个普通类里面。 using System; using System.Threading; using System.Windows.Forms; namespace MainClass { public class MainApp { private static Mutex myMutex; private static bool requestInitialOwnership = true; private static bool mutexWasCreated; /* 以上的部...[ 查看全文 ]
  • 标签:ASP
           欢迎您加入C#的世界!      这一章将把您引进C#的天地,并回答一些相关的问题,如:您为什么要使用C#,C++和C#的主要有什么不同点,以及为什么C#使开发更容易而且还使您感到很有趣。      为什么是另外一种编程语言?      必须回答的一个问题:当您已经使用C++或VB从事企业开发时,为什么还要学...[ 查看全文 ]
  • 数周前,微软公司在2000年6月份举行的“职业开发人员技术大会”(pdc)上正式发布了c#语言,自此掀开了一部新兴高级语言的篇章。关于这种新语言,有很多很多传闻,也有很多网友急于想了解它,对此,微软通用运行库开发小组的高级程序员jeffrey接受了网友的提问,并一一作了回答,下面就是有关.net和c#语言问答的整理。 q1.问:搞了这么久,我一直都没弄明白,.net是运行库呢还是开发平台哪? 答:都是!...[ 查看全文 ]
  • 应该说,从 C/C++ 发展到 C#,进而到 Microsoft .NET Framework,对于习惯使用 C/C++ 的程序员来说是一次小小的打击。换句话说,C# 编程将带来翻天覆地的变化,不仅要完成范例转换,还要完成程序模型的重建以及其他各种令人难以捉摸的词组转变。但是,随着新一年的到来,不正是学习新编程语言的好时机吗? 我现在实在是抽不出时间教您如何使用 C# 进行编程。至于您打算如何学习这种语言完全取决于您的个人...[ 查看全文 ]
  •    1 绪论 c# 是一种简练,时髦(?),面向对象(object oriented),类型可靠(type-safe)的 编程语言。它(发音:C sharp)是从c/c++发展而来的(?俺觉得更象是java),和c/c++ 是一个语系。所以,很容易被c/c++的程序员接受。c#的目标是结合Visual Basic的高产和 C++质朴的力量。 c#将会是vs7的一分子。vs7还支持vb,vc和标记语言——VBScript和JScript。所有这些语言 都会在Next Gener...[ 查看全文 ]
  • About program language such as C++, C#, Java and Delphi, how to choose a good one for a freshman ? This view has pointed by many people here and different person have different ideas. In my opnion, , C# is the first choose for anyone. Why? Because it's different from any other language. C# comes from C++ and Java in some extend views. So it's obviouse for C# that it have th...[ 查看全文 ]
  • 获取文件的版本信息: FileVersionInfo myFileVersionInfo1 = FileVersionInfo.GetVersionInfo("D:\\TEST.DLL"); textBox1.Text="版本号: " + myFileVersionInfo1.FileVersion; 更改文件属性,删除只读文件: 下例欲将E:\test.txt文件拷贝至D:\tmp\test.txt,但D:\tmp\test.txt已经存在。 //File.Copy(sourceFile,destinationFile,true); 用来拷贝文件 //当destinationFile已经存在时,无法将文件f...[ 查看全文 ]
  • 许多软件都有自动关机功能,特别是在长时间下载的时候,这个功能可是使你不用以守候在计算机前面,而电脑却能按照您事先的设定自动关闭。现在我们用visual C#来编写一个多功能的关机程序。该程序具有:定时关机、倒计时关机、关机提醒、系统信息获取等四项功能, 可设定关机时间精确到秒。并且让你很快掌握Visual C#中对API的操作程序。 一. 设计关闭Windows窗体 1. 界面的设计 新建一个标准工程,向...[ 查看全文 ]
  • base base 关键字用于从派生类中访问基类的成员:  调用基类上已被其他方法重写的方法。  指定创建派生类实例时应调用的基类构造函数。  基类访问只能在构造函数、实例方法或实例属性访问器中进行。  示例: 在派生类中调用基类方法。  // base 关键字 // 访问基类成员 using System; public class BaseClass {   &n...[ 查看全文 ]
  • 1。6 统一系统类型(Type system unification) c#独创了一种类型——统一系统类型(为了这个累刑,我头疼死了。谁有更好的名字,请务必告诉 我)。总之,所有的其他类型,包括值和引用,都可以被当作统一系统类型来对待。从概念上说, 所有的类型都从它派生。这样,其他的类型就可以使用统一系统类型的属性和方法。包括一些“简 单”类型,如:int。还是给个例子吧:*/ using System; class Test { &...[ 查看全文 ]
  • C#书写规范  一、命名  对于理解应用程序的逻辑流,命名方案是最有影响力的一种帮助。名称应该说明“什么”而不是“如何”。通过避免使用公开基础实现(它们会发生改变)的名称,可以保留简化复杂性的抽象层。例如,可以使用 GetNextStudent(),而不是 GetNextArrayElement()。  命名原则是:  选择正确名称时的困难可能表明需要进一步分析或定义项的目的。使名称足够长以...[ 查看全文 ]
  • 数组是一种数据结构,其声明方式如下: type[] arrayName; 数组具有以下属性:     1.数组可以是一维、多维或交错的。     2.数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。     3.交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null。     4.数组的索引从零开始:具有 n 个元素的数组的索引是从 0 到 n-1...[ 查看全文 ]
  • What is a GUID For those of you who don''t know, a GUID (pronounced goo''id - Globally unique identifier) is a 128-bit integer that can be used to uniquely identify something. You may store users or products in your database and you want somehow uniquely identify each row in the database. A common approach is to create a autoincrementing integer, another way would be to creat...[ 查看全文 ]
  • //MyComposite using System; using System.Collections; //----------------------------------Class FileElement abstract class CFileElement { //Fields protected string name; public CFileElement(string name) { this.name=name; } public abstract void Add(CFileElement e); public abstract void Remove(CFileElement e); public abstract void Display(); }; //Class CFile class CF...[ 查看全文 ]
  • 1。7 语句(Statements) c#借用了c/c++大多数的语句方法,不过仍然有些值得注意的地方。还有些地方是有所改动的。 在这里,我只提一些c#特有的东东。 1。7。10 “foreach”语句 “foreach”语句列举一个集合内的所有元素,并对这些元素执行一系列的操作。还是看看例子吧:*/ using System; using System.Collections; class Test {   static void WriteList(ArrayList list) {   ...[ 查看全文 ]
  • 1?£4 ?¤?¨ò?ààDí£¨Predefined types£? c#ìá1?á?ò??μáD?¤?¨ò?ààDí?£?ü??ó?c/c++óD2?éù?à??μ?μ?·??£?¤?¨ò?òyó?ààDíóDobjectoístring?£ objectààDíê??ùóD????ààDíμ??ù′??£ ?¤?¨ò?ààDí°ü਷?o?êy?¢?T·?o?êy?¢??μ??¢2????¢×?·?oíê?????êy?£·?o?êyóD£osbyte?¢short?¢ intoílong£??T·?o?êyóD£obyte?¢ushort?...[ 查看全文 ]
  • 1。2 自动化的内存管理(Automatic memory management) 手动管理内存需要程序员自行分配和释放内存块。这要求程序员有清晰的头脑和对整个运行过程有十分的 把握(好难!)。而c#把程序员从这难以承担的任务中解放出来。在多数的情况下,这种自动内存管理提 高代码的质量和程序员的生产力。并且,不会对程序的意图和执行产生幅面的影响(?俺可不相信m$的鬼 话)。不过,估计比java的回收站好一点吧。因...[ 查看全文 ]
手机页面 收藏网站 回到头部