随笔 - 46  文章 - 36 评论 - 43 阅读 - 40327

10 2012 档案
插件式编程之使用反射分离MDI的父窗口和子窗口
摘要:使用反射技术实现MDI父/子窗口的分离,插件式开发的实践 阅读全文
posted @ 2012-10-09 01:33 萨迦狐 阅读(395) 评论(0) 推荐(0) 编辑
02.10 桥模式
摘要:设计模式——桥模式需求从现实故事说起,长虹与海尔都是大的电视机生产商,都能够生产21英寸与37英寸的电视,这个问题应该如何建模呢?下面尝试使用继承关系实现: // 定义一个制造商接口 public interface IManufacturer { void ShowName(); } // 再定义一个电视接口 public interface ITV { void Produce(); } // 定义2个电视机子类 public class TV21inches : ITV // 21英寸电视机 { public void Produce() { Console.WriteLine(&quo 阅读全文
posted @ 2012-10-08 15:12 萨迦狐 阅读(152) 评论(0) 推荐(0) 编辑
02.09 装饰模式
摘要:设计模式——装饰模式需求从一个编程任务说起。有段旧代码如下: public class Girl { public virtual void GoSchool() { Console.Write("女孩去上学!"); } }客户提出了新的要求,随着时代的进步,现代女孩上学还需要增加新的功能,有带个花花帽子,穿个漂亮裙子,画眉涂口红等可选功能,但是旧类不允许修改,因为旧的功能还是适合那些传统女孩,还在那些情况下有用。总结就是:不修改旧类代码的情况下,需要增加新的功能;这些新增的功能还可以任意组合。下面先尝试用继承机制来实现。继承旧类来实现添加功能:女孩戴个花花帽子 publi 阅读全文
posted @ 2012-10-07 17:16 萨迦狐 阅读(139) 评论(0) 推荐(0) 编辑
02.08 代理模式
摘要:设计模式——代理模式需求现实生活中,我们难免会需要对一些不熟悉的行业处理事情,常常就找专业的中介机构来代办这些事情:例如法律事务聘请律师代理办案,买二手房找专业的房产中介代办,银行基金理财找基金理财顾问,这些专业的中介都是代理模式(Proxy Pattern)的实际应用。在程序开发中,也有类似的事情。例如设计好了业务规则类,又想添加权限控制。如果直接修改业务规则类代码加进去,则违反了单一职责的原理。那么可以再设计一个代理类,在这里代理类里调用业务规则功能,但是添加需要的权限控制就可以了。还有一种情况,如果开发的系统会依赖于其它系统的某些功能,但是那些被依赖的系统可能因为这样那样的原因还不稳定, 阅读全文
posted @ 2012-10-07 00:48 萨迦狐 阅读(220) 评论(0) 推荐(0) 编辑
我总结的三层结构之二:IDAL示例
摘要:本人学习MSPetShop,结合自己实践经验总结的C#三层结构,就叫做MSPetShop3Tiers吧。 非常需要与同好者交流。 阅读全文
posted @ 2012-10-06 00:45 萨迦狐 阅读(471) 评论(0) 推荐(0) 编辑
我总结的三层结构之一:Model示例
摘要:本人学习MSPetShop,结合自己实践经验总结的C#三层结构,就叫做MSPetShop3Tiers吧。 非常需要与同好者交流。 阅读全文
posted @ 2012-10-06 00:42 萨迦狐 阅读(312) 评论(0) 推荐(0) 编辑
02.07 适配器模式
摘要:设计模式——适配器模式需求你想使用一个已经存在的类,但是它的接口不符合你的要求,怎么办?这样的问题在生活中很普遍:现在大部分笔记本电脑使用USB接口,而现在大部分键盘使用PS2接口,可以使用PS2/USB接口转换器把它们接起来。编程也可以采用这种转换器的思想。定义适配器模式(Adapter Pattern):将一个类的接口,转换成客户期望的另一个类的接口。适配器让原本接口不兼容的类可以合作无间。别名包装(Wrapper)模式。适配器模式的实现方法可以概括为:单独设计一个适配器(Adapter)类,包装(Wrapper)需要适配的源(Adaptee),继承/实现需要适配的目标(Target),重 阅读全文
posted @ 2012-10-05 04:12 萨迦狐 阅读(218) 评论(0) 推荐(0) 编辑
块元素、行元素容纳规则
摘要:作者:sagahu@163.com 日期:2011-12-28块元素一般用作其它页面元素的容器,可以容纳行内元素和块级元素。行内元素只能容纳文本或者其它行内元素form标签是块级元素,一般用来容纳其它块级元素。看下面示例(从浏览器菜单查看HTML源文件):(1)据说,form标签只能容纳其它块元素,但是现在普通文本也容纳了啊!其实,在form标签里是允许写文本和行元素的,只是这样不好!(2)行元素里面能够容纳块元素吗?其实是可以的,但是这样是不符合XHTML验证规则的! 阅读全文
posted @ 2012-10-05 00:33 萨迦狐 阅读(300) 评论(0) 推荐(0) 编辑
CSS继承选择器与包含选择器的比较
摘要:作者:sagahu@163.com 日期:2011-12-21CSS继承选择器与包含选择器的作用很像,其类似点主要有:继承选择器的子孙元素可以继承到祖先元素的某些样式;而包含选择器的子元素可以得到其父元素的某些样式。不是祖先元素/父元素的所有样式属性都能为子孙元素/被包含的子元素得到,只是某一些(可查阅相关资料)。其不同点也有:继承选择器的子孙元素无论是祖先元素的多少级子孙,都满足这种继承关系,因而可以继承到祖先元素的某些属性;而包含选择器的被包含子元素只能是被父元素直接包含,才是匹配那个包含选择器,因而才能得到那个选择器定义的某些样式。例如:p b { ... } // 标签b继承标签p定义 阅读全文
posted @ 2012-10-05 00:30 萨迦狐 阅读(911) 评论(0) 推荐(0) 编辑
匿名方法
摘要:来源:杂烩搜集整理:sagahu@163.com 日期:2012-01-04 匿名方法是C#2.0引入的一个新特性,它允许开发者内联(inline)声明自己的函数代码而无须使用委托函数(delegate function)。匿名方法通常在:(1) 需要一个临时方法,该方法使用次数极少;(2) 这个方法的代码很短,甚至可能比方法声明都短的情况下使用。在C# 1.1里,声明和使用委托要求你有委托和一个在委托被触发时具有匹配签名的能够执行的命名方法,以及一个将命名方法与委托关联的分配语句——这是C#2.0之前版本中,实例化委托的唯一方法。作为C# 2.0的新特性,匿名方法基本上能够提供与先前命名方法 阅读全文
posted @ 2012-10-05 00:11 萨迦狐 阅读(210) 评论(0) 推荐(0) 编辑
02.06 外观模式
摘要:设计模式——外观模式需求.NET程序员大多使用过System.SqlClient、System.OracleClient、System.OleDb,尽管针对的数据库不同,这些类库体系都是实现访问数据库功能。尽管体系结构很相似,使用方法很相似,但是各对应类名称的不同,还是需要各写各的,如果能进行封装,形成一套统一的方法调用就好了。从理论层次来说就是,在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的外观模式(Façade P 阅读全文
posted @ 2012-10-04 01:18 萨迦狐 阅读(177) 评论(0) 推荐(0) 编辑
01.05 单例模式
摘要:设计模式——单例模式需求在各种应用环境中,应该能发现某些类在这样一点上与众不同:这个类在同一时刻只能有一个对象实例,不允许多个。像一个网站的访问计数器,只能是全局唯一实例,这就需要单例模式(Singleton Pattern)。定义单例模式就是确保一个类只有一个实例,并且该实例必须自动创建,并向整个系统提供该实例。实现原理:(1)将构造函数定义成私有或者受保护,使得不能通过构造函数来创建对象;(2)定义一个静态的方法提供公共接口,用于访问维一的实例。单例模式特征:(1)任何时刻单例类只能有一个实例;(2)单例类自己创建这个唯一的实例;(3)单例类必须给所有其他对象提供这个实例。单例模式又可以分 阅读全文
posted @ 2012-10-03 23:38 萨迦狐 阅读(212) 评论(0) 推荐(0) 编辑
01.04 原型模式
摘要:设计模式——原型模式需求比如有个对象,在某一时刻该对象中已经包含了一些有效值,此时可能会需要一个和该对象完全相同的新对象,并且此后对对象的任何修改都不会影响到原来对象中的值。也就是说,新对象与原来的对象是两个完全独立的对象,仅仅新对象的初始值是由原来对象确定的。这样的要求,显然可以以原来的对象为原型,复制出一个新对象来(好像没什么问题,其实在OOP中要注意浅表复制与深度克隆的区别),这种思想就是原型模式(Prototype Pattern)。定义意图:用原型对象指定要创建的对象的类型,并且通过拷贝这些原型对象创建新的同类型对象。原理:通过拷贝一个现有的对象来生成新的同类型的对象。原型设计模式包 阅读全文
posted @ 2012-10-03 23:35 萨迦狐 阅读(186) 评论(0) 推荐(0) 编辑
01.03 构建者模式
摘要:设计模式——构建者模式需求在抽象工厂模式中,每个具体的工厂负责创建一个系列相互关联的产品,当一系列相互关联的产品设计到一个工厂类里后,客户端的调用会变得简单;如果要更换这一系列的产品,只只要切换一个具体的工厂类即可。但是,在实体工厂里包含着零件组装逻辑,这违反了工厂类的单一职责原则,使得工厂类既要负责对象的创建,又要负责零件的组装。如果把组装逻辑转移到客户端,则又会使得客户端变得臃肿。如何设计一个单独的类来负责零件的组装,就可以解决则各问题,而且可以组装出不同系列,这就是构建者模式(Builder Pattern)的由来。定义在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部 阅读全文
posted @ 2012-10-03 01:35 萨迦狐 阅读(214) 评论(0) 推荐(0) 编辑
01.02 抽象工厂模式
摘要:设计模式——抽象工厂模式需求在工厂方法模式中,一个具体的工厂负责创建一个单一的产品。如果有多个产品要创建,就需要多个不同的工厂类,即使这些产品有某些必然的联系,如多个产品家族或者多个配套产品系列,也是需要多个看起来分散的工厂类。举个实际的例子,游戏中男孩的帽子、鞋、衣服区别与女孩的帽子、鞋、衣服,各成一个系列,如果使用工厂方法模式来实现,那么那些实体工厂类就在代码上不能体现其配套的内在来年西,看起来太分散了。而抽象工厂模式就是针对多个产品结构而言的,它主要帮助客户一次创建一个家族的多个产品对象。定义抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。又称为Kit模 阅读全文
posted @ 2012-10-02 16:20 萨迦狐 阅读(178) 评论(0) 推荐(0) 编辑
01.01 工厂方法模式
摘要:设计模式——工厂方法模式需求简单工厂模式,简单地实现了对象创建工作和方法使用的分离,实现了模块的责任分配,但是所有对象的创建工作都集中到了那个工厂类里。但是,如果需要创建的对象很多,这个工厂类就会非常庞大,仍然不利于后期的代码维护,怎么办?根据面向对象的思想,应该继续进行职责的分配和封装,也就是说,如果把每一个产品都由一个具体的工厂来创建,把简单工厂模式中那个庞大的工厂拆分成一个个小工厂类,这样每个具体的工厂类只负责某类对象的创建,职责就分配开了,这就是工厂方法模式。定义工厂方法模式(Factory Method pattern)相对于简单工厂模式来说,就是把一个单一的工厂类,分成了多个具体的 阅读全文
posted @ 2012-10-02 04:06 萨迦狐 阅读(175) 评论(0) 推荐(0) 编辑
01.00 简单工厂模式
摘要:设计模式——简单工厂模式需求在程序设计中,常常需要把对象的创建与使用分离开来,创建型模式都是为了解决此类问题。简单工厂模式是所有工厂模式中最简单的一个,是学习其它模式的基础。许多时候,我们需要一个类来负责根据情况简单地创建类的对象,而客户程序负责使用即可,就可以用到这种模式。定义简单工厂由3部分组成:(1)首先定义一个抽象产品类来描述产品规格;(2)再定义各具体的产品类实现抽象产品类描述的规格;(3)再定义一个静态的工厂方法负责根据传入参数来创建具体的实体产品对象,这个静态工厂方法最后写在一个单独的类里。由于这个工厂方法是静态的,所以简单工厂模式又名静态工厂方法模式(Static Factor 阅读全文
posted @ 2012-10-02 02:19 萨迦狐 阅读(174) 评论(0) 推荐(0) 编辑
table标签与样式的例子
摘要:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head> <title>table标签与样式的例子</title> <style type="text/css"> 阅读全文
posted @ 2012-10-02 00:44 萨迦狐 阅读(294) 评论(0) 推荐(0) 编辑
通用js模块06:ajaxutils.js
摘要:/* ===========================================================模块说明:对于Ajax操作的一些补充功能charset:gb2312调用模块:搜集整理:sagahu@163.com最后修订:2011-12-06*/// 根据实际的浏览器类型,智能创建XMLHttpRequest对象。function createXMLHttpRequest() { var req; if (window.XMLHttpRequest) { // code for Firefox, Opera, IE7, etc. req = new XMLHttpR 阅读全文
posted @ 2012-10-02 00:35 萨迦狐 阅读(323) 评论(0) 推荐(0) 编辑
通用js模块05:xmlutils.js
摘要:/* ===========================================================模块说明:对于xml操作的一些补充功能charset:gb2312调用模块:搜集整理:sagahu@163.com最后修订:2011-12-06*/// 浏览器类型变量var isIe = window.ActiveXObject;var isMoz = document.implementation && document.implementation.createDocument;// 根据实际的浏览器类型,智能创建XMLDOM对象function X 阅读全文
posted @ 2012-10-02 00:33 萨迦狐 阅读(175) 评论(0) 推荐(0) 编辑
通用js模块04:cookieUtils.js
摘要:/* ===========================================================模块说明:对于cookie操作的一些补充功能charset:gb2312调用模块:搜集整理:sagahu@163.com最后修订:2013-01-22*/function addCookie(name, value, expireDays, path, domain) { delCookie(name); expireDays = expireDays ? expireDays : 30; path = path ? path : "/"; var d 阅读全文
posted @ 2012-10-02 00:31 萨迦狐 阅读(199) 评论(0) 推荐(0) 编辑
通用js模块03:formatutils.js
摘要:/* ===========================================================模块说明:对于javascript字符串操作的一些补充功能charset:gb2312调用模块:stringutils.js搜集整理:sagahu@163.com最后修订:2011-12-12*/// 把给定非负整数按照指定位数要求格式化为编码function coding(uint, len) { var code = '00000000000000000000000' + uint.toString(); return code.substring(c 阅读全文
posted @ 2012-10-02 00:23 萨迦狐 阅读(249) 评论(0) 推荐(0) 编辑
通用js模块02:validutils.js
摘要:/* ===========================================================模块说明:对于数据验证的一些补充功能charset:gb2312调用模块:stringutils.js搜集整理:sagahu@163.com最后修订:2011-12-15*/function isSpace(str) { var strComp = str; try { if (strComp == " " || strComp == "" || strComp == " " || strComp == null 阅读全文
posted @ 2012-10-02 00:22 萨迦狐 阅读(229) 评论(0) 推荐(0) 编辑
通用js模块01:stringutils.js
摘要:/* ===========================================================模块说明:对于javascript字符串操作的一些补充功能charset:gb2312调用模块:搜集整理:sagahu@163.com最后修订:2011-12-12*/String.prototype.Repeat = function(num) { return repeat(this, num); }// 按照指定次数重复字符串function repeat(str, num) { var r = ''; while (num) { if (num & 阅读全文
posted @ 2012-10-02 00:19 萨迦狐 阅读(279) 评论(0) 推荐(0) 编辑
应用开发平台与代码生成工具感想
摘要:应用开发平台与代码生成工具感想聪明人干重复事情会怎样?作程序员十多年了,经历了太多的规律性需求的重复建设。我想我是个聪明人,因为每次干这种重复事情,都需要忍耐枯燥而又必须细心,每次我都痛不欲生。我非常需要一些善解人意的辅助开发工具,实在是需要解脱或者减少那种痛苦。必须积累可复用模块必要性不容置疑,这个世界不允许每次重复写已经写过一次的东西,否则你就会苦守清贫。显然DBHelper就是这样的东西,本人就总结MS Access、MS SQL Server、Oracle、MySQL四种数据库的规律,写了一个通用于它们的mySagasoft.DBUtility2010。对于加密保护数据,则写了个myS 阅读全文
posted @ 2012-10-02 00:13 萨迦狐 阅读(305) 评论(0) 推荐(0) 编辑
00.00 设计模式总介
摘要:设计模式——总介分类GoF总结出来23种设计模式,大体上可以分为3大类,分别从对象的创建、对象的结构及对象的行为这3个方面来总结代码编写经验。第一大类:创建型模式 在程序设计中,如果将对象的创建和使用都放在客户程序中一起执行,首先会使得客户的资源效率占用很大;客户程序代码增大,又使得客户程序的维护费用加大。所以很多时候有必要把对象的创建与使用分离开来,创建型模式就是为了解决这类问题,正所谓“分而治之”,大家都省心。这样做也可以满足一些特殊的需求。 01.00 简单工厂模式(Simple Factory) 01.01 工厂方法模式(Factory Method) 01.02 抽象工厂模式(Abs 阅读全文
posted @ 2012-10-02 00:10 萨迦狐 阅读(187) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示