摘要: 观察者模式:定义对象间的一种一对多的关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动更新先上图废话不说,上代码 class Program { //观察者模式 [əb'zə:və, ɔb-] static void Main(string[] args) { ConcreteSubject s = new ConcreteSubject(); s.Attach(new ConcreteObserver(s, "a")); s.Attach(new Concr... 阅读全文
posted @ 2012-03-04 20:00 艾伦 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 文章场景取自日常工作中,先大概描述一下,小公司一般工作流程是,需求方需要改什么需求,增加什么功能,直接找到程序员进行更改用代码表示这种场景就是 class demand //需求方 { //传统方式,需求方直接找程序员改功能 coder code; public demand(coder code) { this.code = code; } public void GetCount() { code.GetCount(); } public void GetDataInterface() { code.GetDataInterface(); } } class coder//程序员 { pu 阅读全文
posted @ 2011-08-18 14:39 艾伦 阅读(735) 评论(0) 推荐(0) 编辑
摘要: 外观模式(Facade Pattern)可以将一系列复杂的类包装成一个简单的封闭接口。也称门面模式.Facade模式的意图是:为了子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用先上图可以看的出来,我们客户端调用子系统方法,并不是直接调用,而是中间有个高层次的统一接口Entityclient调用只是跟Entity这个类打交道,别的don't care class Client { //门面/外观模式 facade[fə'sɑ:d] 之C# /* 应用场景 * 为子系统中的接口提供一个一致的调用方法,一般在项目的前期不用 阅读全文
posted @ 2011-08-15 12:48 艾伦 阅读(1974) 评论(2) 推荐(1) 编辑
摘要: 上一篇说的是简单工厂,工厂模式,抽象工厂抽象工厂解决了我们切换的问题,但是如果要新增子类的时候,我们需要修改的地方就很多了要新增一个类IProject,ProjectA,ProjectB,更改抽象工厂以及工厂的实现子类没有一种方法是适用于所有情况的,也没有一种方法是万能的,不同的场景,我们要考虑不同的方法进行优化在这里,我说的是用简单工厂模式优化抽象工厂,以应对新增的情况,先来简单工厂的图好的,上代码namespace AbstractFactoryOptimize{ /*抽象工厂在切换产品的时候很方便,但是在新增功能的时候,就会要改动很多东西了 要新增一个类IProject,ProjectA 阅读全文
posted @ 2011-08-11 13:00 艾伦 阅读(1098) 评论(1) 推荐(0) 编辑
摘要: 前面介绍了策略和单例模式,这篇文章说一下简单工厂,工厂,抽象工厂的概念和应该场景首先,从简单工厂开始:见上图,可以看出来,最核心的部分就是工厂类了,所有的变化都封装在这个工厂类里面,Client不用关心类的实例化但是,可谓成也工厂类,败也工厂类如果,实例化的对应有所变化,就需要修改核心工厂类,违背了开放-封闭原则(对修改封闭,对扩展开放)C#版本代码实现SimplyFactory public abstract class Simplyfactory { public abstract string CreateFactory(); } public class SimplyA : Simpl 阅读全文
posted @ 2011-07-29 10:13 艾伦 阅读(5865) 评论(8) 推荐(3) 编辑
摘要: 单例模式是为了确保一个类中只有一个实例被创建,并提供对该实例的全局访问指针废话不说,上代码Singletonpublic sealed class Signton { public static Signton singn = null; private static readonly object padlock = new object(); private Signton() { } public static Signton Instance { get { if (singn == null) { /* lock关键字可以用来确保代码块完成运行,而不会被其他线程中断 这是通过在代码块 阅读全文
posted @ 2011-07-27 14:18 艾伦 阅读(806) 评论(0) 推荐(0) 编辑
摘要: 策略模式是目前我工作中比较常用的模式下面贴出搜集各种语言的版本,记得我当初刚开始的时候,只会C#,别的语言看不明白,不知道现在还有没有人有我当年的烦恼!所以在这里我提供c#,C++,java,php四种版本,本来想写python版本,可惜自己不太懂,怕弄错让大家笑话首先来个策略模式的大致讲解,定义一系列的算法,把他们一个个封装起来,并且使他们可相互替换,本模式使得算法可独立于使用它的客户而变化客户端知道要调用具体哪个算法,由客户端决定使用的算法,算法可以独立于客户端自由的变动如下图:C#版本策略模式:using System; using System.Collections.Generic; 阅读全文
posted @ 2011-07-25 17:58 艾伦 阅读(743) 评论(0) 推荐(0) 编辑
摘要: insert into Ecp_Chat_Message(CHATID,CONTENT,IMGURL,SENDUSERID,SENDTIME,RECEIVEUSERID,STATE,ISREAD)values(1,'asdfdf','aaaa','kehu4',to_date('2011-12-03 12:55:45.333333','yyyy-mm-dd hh24:mi:ss.ff'),'serviceid',1,0)报错如下:日期格式图片在转换整个输入字符串之前结束插入到秒的可以这样写,inse 阅读全文
posted @ 2011-07-05 16:49 艾伦 阅读(666) 评论(0) 推荐(0) 编辑
摘要: sql写法,F5运行select top 10 * from Ecp_Chat_AllotService oracle写法,F8运行select * from Ecp_Chat_AllotService where rownum<=10mysql写法 ,F9运行SELECT * FROM USER LIMIT 0,10后面补充自增设置,sql 设置属性oracle 系列mysql 未知 阅读全文
posted @ 2011-07-05 13:38 艾伦 阅读(873) 评论(0) 推荐(0) 编辑
摘要: 查找ecp_wbs_workorder_info中work_order_id在 ecp_wbs_workorder_deal_info表中的数据in 写法select * from ecp_wbs_workorder_info info where work_order_id in(select work_order_id from ecp_wbs_workorder_deal_info)exists写法select * from ecp_wbs_workorder_info where exists(select * from ecp_wbs_workorder_deal_info d w. 阅读全文
posted @ 2011-07-04 12:38 艾伦 阅读(514) 评论(0) 推荐(1) 编辑