2013年4月7日

设计模式学习4-Bridge模式

摘要: Bridge模式(桥接模式):定义:将抽象与其实现解耦,使它们都可以独立地变化。(注:这里的实现指抽象类及其派生类用来实现自己的对象)实现:将实现封装在一个抽象类中。在要实现的抽象的基类中包含一个实现的句柄。结构图:其中Abstraction为要实现的对象接口,Implementor为具体的实现类接口。Abstraction的派生类使用Implementor的派生类,却无需知道自己具体使用哪一个ConcreteImplementor。代码示例:考虑这样的软件需求:需要编写一个程序,使用两个绘图程序(DP1和DP2)之一绘制矩形和圆形。首先先定义实现,Drawing为实现的基类,V1Drawin 阅读全文

posted @ 2013-04-07 01:54 cjfwu 阅读(250) 评论(0) 推荐(1) 编辑

2013年3月31日

设计模式学习3-Strategy模式

摘要: 场景描述:一觉醒来看下时间还有30分钟才上班呢,笃笃定定穿好衣服,先抽根烟,然后去刷牙洗脸,慢悠悠上班去了;如果一觉醒来还有15分钟就迟到了,算了不抽烟了,穿好衣服,刷牙洗脸,急匆匆上班去了;如果一觉醒来只有5分钟了,肿么办!先花5秒钟平复一下心情,赶紧穿好衣服冲出去了!可以发现,对于不同的起床时间做了不同的事情,如果用程序实现,有什么合适的模式吗?嗯,Strategy模式Strategy模式(策略模式):定义:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。将对算法的选择和算法的实现相分离。实现:让使用算法的类(Context)包含一个抽象类(Strategy),该抽象类有一个 阅读全文

posted @ 2013-03-31 01:28 cjfwu 阅读(446) 评论(3) 推荐(2) 编辑

2013年3月23日

设计模式学习2-Adapter模式

摘要: 背景描述:在日常生活中大家有没有碰到过这种情况:墙上的插座只有3孔的,可是电器的插头是2脚的,怎么办?我的做法是找把老虎钳将插头2脚拧斜然后就可以插到3孔的插座了,哈哈。能不能不要这么粗鲁啊,好吧,找一个2孔转3脚的转换器。这个转换器就是Adapter。Adapter模式:定义:将一个类的接口转换成Client希望的另外一个接口。Adapter模式使原来由于接口不兼容而不能一起工作的类可以一起工作。实现:将原有类包含在另一个类之中。让包含类与需要的接口匹配,调用被包容类的方法。结构图: 说明:Adapter模式最常见的用途就是保持多态性。如结构图所示,Target接口有Request方... 阅读全文

posted @ 2013-03-23 23:28 cjfwu 阅读(459) 评论(1) 推荐(1) 编辑

设计模式学习1-Facade模式

摘要: 背景描述:我们经常会碰到这样的情况:拿到一个别人开发的类库,需要在此基础上做二次开发,而这个类库因为包含所有可能用到的功能而过于复杂,而我们只需要其中一部分功能或者希望以比较简单的方式使用它,这时Facade模式就派上用场了。Facade模式:定义:为子系统中的一组接口提供一个统一接口,Facade模式定义了一个更高层的接口,使子系统更加容易使用。实现:定义一个(或多个)具备所需接口的新类,让新的类使用原有的系统。结构图: 说明:说白了Facade模式就是把原来复杂的接口变成简单统一的接口,方便Client使用。Facade模式变体:除了上述基本用法以外,Facade模式还有其他的应用... 阅读全文

posted @ 2013-03-23 19:08 cjfwu 阅读(451) 评论(1) 推荐(0) 编辑

2013年3月10日

设备控制(反馈处理)

摘要: 因为项目的关系,经常需要程序控制各种设备并接收设备消息反馈,这里以中控为例,说下我对消息反馈的做法。首先需要根据具体的消息反馈建立对应的类,分别为总电源,大屏模式,灯光。View Code 1 public enum Power { Off, On } 2 3 public class PowerNotify : Notify { 4 public Power Power { get; set; } 5 } 6 7 public class ApolloModeNotify : Notify { 8 public int M... 阅读全文

posted @ 2013-03-10 12:05 cjfwu 阅读(483) 评论(1) 推荐(0) 编辑

2012年3月9日

通过System.IO.Packaging实现打包和解包

摘要: 微软提供了System.IO.Packaging类库用于打包和解包,这样文件的打包和解包就很方便了,代码如下: 1 class Program { 2 static string sourceFolder = @"d:\source"; 3 static string targetFolder = @"d:\target"; 4 static string pkgFile = @"d:\package.pkg"; 5 6 static void Main(string[] args) { 7 Cr... 阅读全文

posted @ 2012-03-09 18:11 cjfwu 阅读(3155) 评论(0) 推荐(1) 编辑

2012年2月16日

将目录添加环境变量

摘要: 有的时候我们需要将exe所在目录添加环境变量,这样可以在cmd中直接调用此exe,方法如下: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.IO; 6 using Microsoft.Win32; 7 using System.Diagnostics; 8 using System.Runtime.InteropServices; 9 10 namespace AppGet {11 class Program {12... 阅读全文

posted @ 2012-02-16 13:44 cjfwu 阅读(1679) 评论(0) 推荐(0) 编辑

2010年7月18日

设备控制之矩阵状态显示

摘要: 在做设备控制的时候,比较麻烦的是连接到矩阵输出端上的设备(比如:投影机,显示器)的信号显示问题,下面说下我用的方法:首先建个接口:[代码]UseVideoOutput用于判断设备是否连到矩阵的输出端output,如果返回true,则通过BindVideoSignal将矩阵对应的输入端input绑定给此设备。每个连到矩阵输出端的设备对应的UserControl继承此接口,比如Odin设备的每个输入端... 阅读全文

posted @ 2010-07-18 22:01 cjfwu 阅读(452) 评论(1) 推荐(0) 编辑

2010年6月27日

windows shell 编程3(函数解释)

摘要: 详细解释一下 Shell 编程中最基本的一些函数、结构体和枚举。SHGetDesktopFolder 获取桌面的 IShellFolder 接口[代码]要使用这个函数,必须先定义一个 IntPtr 指针。然后通过指针,使用 GetObjectForIUnknown 返回通过指向 COM 对象的 IShellFolder 接口的指针实例。于是需要编写以下函数:代码ParseDisplayName 获... 阅读全文

posted @ 2010-06-27 17:04 cjfwu 阅读(698) 评论(0) 推荐(0) 编辑

windows shell 编程2(浏览文件夹)

摘要: Windows Shell 编程,即 Windows 外壳编程。我们所看到的资源管理器以及整个桌面,都是一个 Shell。我们知道,在win32中是以外壳名字空间的形式来组织文件系统的,在外壳名字空间里的每一个对象(注)都实现了一个IShellFolder的接口,通过这个接口我们可以直接查询或间接得到其他相关的接口。下面做个程序用于浏览文件夹:在C#中,我们这样定义 IShellFolder 接口... 阅读全文

posted @ 2010-06-27 16:49 cjfwu 阅读(920) 评论(3) 推荐(0) 编辑

导航