CSharp

设计模式(Design Pattern)系列之.NET专题

懵懂的女人 提交于 2020-03-04 12:05:06
最近,不是特别忙,重新翻了下设计模式,特地在此记录一下。会不定期更新本系列专题文章。 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。 设计模式分为三种类型,共23种。 #Ⅰ.创建型模式 1.1 单例模式(Singleton Pattern) 保证一个类仅有一个实例,并提供一个访问它的全局访问点。( 单例模式是最简单的设计模式之一) 1.2 抽象工厂模式(Abstract Factory) 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 1.3 建造者模式(Builder Pattern) 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 1.4 工厂模式(Factory Pattern) 定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。 1.5 原型模式(Protype Pattern) 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。 Ⅱ.结构型模式 2.1 适配器模式(Adapter

CSharp加快自定义控件的绘制

半世苍凉 提交于 2019-12-05 15:04:15
前两天由于需要用CSharp做一个控件,就翻看了以前做控件里自己的代码。不看不知道,看了才知道以前自己写的控件糟糕到什么程度! 自定义一个控件需要继承CSharp提供的一个专门的用户控件类UserControl,我们使用自己的控件基本上或者说必须重载一下onPaint方法了,以前的代码就是将绘制控件所需要的逻辑都写在onPaint方法里了,如果绘图量比较小的话还可以接受,但是稍微复杂一点的控件这样做的弊端就出来了!这里会将导致整个窗体的刷新拖慢从而使界面不流畅! 不清楚CSharp控件的新手容易犯这个错误,将onPaint变得极其庞大。大家都知道,内存与内存之间传递数据很快,但是内存与显存之间交换数据相较于内存与内存之间速度就会很慢了,不知道.NET对这一部分是如何优化的,但是直接在onPaint里每次调用Graphics的绘制方法直接操作显存(姑且这么说),将数据一小段地从内存中传递到显存中这个速度是很慢的。 所以假如的代码是这样的 protected override void onPaint(...) { e.g.draw...(); ... ... e.g.draw...(); ... ... } 那么建议改掉它! 我目前所做的控件里的onPaint是这样的 protected override void onPaint(...) { base.onPaint(e); e

.NET设计模式(1):1.1 单例模式(Singleton Pattern)

不打扰是莪最后的温柔 提交于 2019-11-30 09:29:40
#概述 单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点。 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 意图 保证一个类仅有一个实例,并提供一个该实例的全局访问点。 场景 Windows的Task Manager(任务管理器)就是很典型的单例模式,任何时候只能打开一个窗口。 windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。 网站的计数器,一般也是采用单例模式实现,否则难以同步。 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。 Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。