摘要: 最近网友一直在讨论这个问题,搜索引擎过后网上抓文总结如下: 工厂方法UML图: 抽象工厂UML图: ---------------------------------对于java来说,你能见到的大部分抽象工厂模式都是这样的: 它的里面是一堆工厂方法,每个工厂方法返回某种类型的对象。比如说工厂可以生产鼠标和键盘。那么抽象工厂的实现类(它的某个具体子类)的对象都可以生产鼠标和键盘,但可能工厂A生产的是罗技的键盘和鼠标,工厂B是微软的。这样A和B就是工厂,对应于抽象工厂; 每个工厂生产的鼠标和键盘就是产品,对应于工厂方法;用了工厂方法模式,你替换生成键盘的工厂方法,就可以把键盘从罗技换到... 阅读全文
posted @ 2009-02-27 00:26 音乐啤酒 阅读(565) 评论(0) 推荐(0)
摘要: 1.单一职责原则单一职责原则:就一个类而言,应该仅有一个因其他变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,当一个职责变化的可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离,2.开放-封闭原则开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展,但是不可修改。无论一个模块是多么的“封闭”,都会存在一些变化,既然不可能完全封闭,设计人员必须对他设计的模块应该对哪种变化封闭做出选择,他必须先猜测最有可能发生的变化种类,然后构造抽象来隔离那些变化。 阅读全文
posted @ 2009-02-25 19:19 音乐啤酒 阅读(215) 评论(0) 推荐(0)
摘要: 模板方法模式:定义一个操作中的算法骨干,而将这些步骤延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特点步骤。实例图:抽象类定义算法的骨干(TemplateMethod)和可能使用到的算法(primitiveoperation1,2)这2个算法由子类继承并且实现。concreteClass类继承抽象类,实现primitiveMethod方法。功抽象类的实例在骨干方法中调用模板方法模式是通过把不变的行为搬移到超类中,去除子类中重复代码来体现他的优势。模板方法模式提供了一个很好的代码复用平台。当不变和可变的行为在方法的子类中实现中混混合在一起的时候,不变的行为就会在 阅读全文
posted @ 2009-02-25 17:36 音乐啤酒 阅读(182) 评论(0) 推荐(0)
摘要: 策略模式:定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 简单工厂:将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。 简单工厂严格意义上不是一种设计模式,只能是一种良好的编程习惯。简单工厂模式是创建的对象,且由该对象调用其内部的指定算法,主要是针对的对象之间的行为差异,单独封装 策略模式是针对的对象内部行为的算法,可以看作是一个集合,是允许多个策略实体进行叠加的。但工厂模式就不成。这是csdn一些人的看法首先简单工厂模式,属于创建者模式,他是讲究类的创建的,策略模式输入行为模式,是说一个事情的多种实现算法的,算法不同。从代码层次来看:简单 阅读全文
posted @ 2009-02-24 18:20 音乐啤酒 阅读(184) 评论(0) 推荐(0)
摘要: using System;using System.Security.Cryptography;using System.Web.Security;using System.IO;using System.Text;/// <summary>/// CryptTo 实现加密、解密算法/// </summary>public class CryptTo{ /// <summary> /// 根据任意字符生成Des密钥 /// </summary> /// <param name="secret">生成密钥的种子字&l 阅读全文
posted @ 2009-02-21 19:24 音乐啤酒 阅读(766) 评论(0) 推荐(0)
摘要: 提高网站速度的最佳实践【翻译】原文地址是这个地方:http://developer.yahoo.com/performance/rules.html,英语水平有限,翻译可能不到位,自己再看看这个英文原版了。1.最小化HTTP请求终端用户响应时间的80%用在前端显示上,大部分时间浪费在下载页面组件上面,比如:图片,css样式,flash,脚本等等,降低返回的http请求的页面的组件数量,这是加快页面的重要环节。减少页面组件的一个方法就是简化页面设计,但是如果要设计一个富页面应用的web系统如何减少组件呢?下面有些技术可减少http请求,同时可以开发富页面程序css样式是减少图片数量的一个比较好的 阅读全文
posted @ 2009-02-17 22:04 音乐啤酒 阅读(265) 评论(0) 推荐(0)
摘要: 这里的大型网站架构只包括高互动性高交互性的数据型大型网站,基于大家众所周知的原因,我们就不谈新闻类和一些依靠HTML静态化就可以实现的架构了,我们以高负载高数据交换高数据流动性的网站为例,比如海内,开心网等类似的web2.0系列架构。我们这里不讨论是PHP还是JSP或者.NET环境,我们从架构的方面去看问题,实现语言方面并不是问题,语言的优势在于实现而不是好坏,不论你选择任何语言,架构都是必须要面对的。 这里讨论一下大型网站需要注意和考虑的问题 1、海量数据的处理 众所周知,对于一些相对小的站点来说,数据量并不是很大,select和update就可以解决我们面对的问题,本身负载量不是很大,最多 阅读全文
posted @ 2009-02-16 19:02 音乐啤酒 阅读(144) 评论(0) 推荐(0)
摘要: 使用loadruner做压力测试,版本是9.0最近公司使用的web接口,在上线的时候经常会挂掉,怀疑是系统性能问题,就想使用loadruner做一下压力测试从头开始学了,loadruner是hp的产品了,9.0的版本。loadruner是用来做压力测试和性能测试的强大工具,实在太强悍了,以至于我看了几天也只是熟悉很少一部分而已。1.loadruner9.0的下载以及破解,网上文章很多,百度,google一下就可以。9.0还是英文版本。破解的时候要求你输入license。网上流传的是两个版本,一个global,一个是web,他们的注册码不一样,对应的协议也不一样,推荐使用global他支持协议多 阅读全文
posted @ 2009-01-13 22:09 音乐啤酒 阅读(915) 评论(0) 推荐(0)
摘要: c#多线程操作Windows Forms控件在Windows Forms编程中涉及到的多线程操作,多个线程来更新Forms上的控件,比如textbox等。但是如果你直接在线程中更新textbox的text属性是会报错的。因为textbox是主线程创建的,子线程访问的时候就会报错。解决方案如下,建立一个Windows Forms项目,拖拉一个textbox和button就可以。点击button来启动线程,在线程中修改textbox的值。这需要使用委托类//启动线程private void button1_Click(object sender, EventArgs e) { Thread thr 阅读全文
posted @ 2009-01-08 03:27 音乐啤酒 阅读(489) 评论(0) 推荐(0)
摘要: Net提供了许多多线程编程工具,可能是因为太多了,所以掌握起来总是有一些头疼,我在这里讲讲我总结的一些多线程编程的经验,希望对大家有帮助 不需要传递参数,也不需要返回参数 我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下 ThreadStart threadStart=new ThreadStart(Calculate); Thread thread=new Thread(threadStart); thread.Start(); public void Calculate(){ double Diameter=0.5; Console.Write("The per 阅读全文
posted @ 2009-01-08 02:59 音乐啤酒 阅读(192) 评论(0) 推荐(0)
摘要: 在Windows的编程环境,真奇怪。原来一直搞web编程。初次接触Windows挺有意思,还是因为联通sgip短信sp的开发。sytem.threading.timer必须是全局变量,不能放在方法体里面。那个回调还是最好也是全局变量,愿意和垃圾回收机制有管这是我csdn的帖子。具体可以看这个http://topic.csdn.net/u/20081223/15/0461d1eb-2b10-4fc5-9406-93761839aeff.html?seed=532866789本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。 阅读全文
posted @ 2008-12-24 00:39 音乐啤酒 阅读(247) 评论(0) 推荐(0)
摘要: 联通Sgip短信终于被我搞定了,哈哈,惭愧啊,搞了两周,中间郁闷很长时间了。感谢各位帮助我的人啊 阅读全文
posted @ 2008-12-20 18:54 音乐啤酒 阅读(696) 评论(1) 推荐(0)
摘要: c#的委托和事件(原文)好文章啊,虽然有点长,但是真的值得慢慢看。引言委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。将方法作为方法的参数我们先不管这个标题如何的绕口,也不管委托究竟是个 阅读全文
posted @ 2008-12-13 09:07 音乐啤酒 阅读(211) 评论(0) 推荐(0)
摘要: 随着网站的运营,用户访问量和数据存储量会随着时间发生几何级变化,很快整个系统不堪重负,频繁出现问题。其实要设计一个高可用、高负载的系统还是有一定的规矩可循的,其手段无外乎向上扩展(Sacle Up 硬件扩展)或者向外扩展(Scale Out 软件扩展),这两种方案在某一阶段时期,会显著改善网站的性能,但不久之后,问题依旧。本文参考网上相关资料,试图提供一个可行的 "有限" 解决方案。早期1. 对业务应用进行垂直分割,将不同的业务边界划分出来。程序员常说的 "多层体系" 只是纵向解决了不同编程层次的划分,相对于业务而言,并没有做出什么处理。现在 SOA 大 阅读全文
posted @ 2008-11-22 18:59 音乐啤酒 阅读(228) 评论(0) 推荐(0)
摘要: alter proc InsertInfoToFriend@input varchar(1000),@split varchar(1)aswhile(charindex(@split,@input)<>0) begin set @uid = substring(@input,1,charindex(@split,@input)-1) --当前循环到用户id set @input =stuff(@input,1,charindex(@split,@input),'') --修改过后的输入参数--其他业务过程end本文使用Blog_Backup未注册版本导出,请到sof 阅读全文
posted @ 2008-11-04 01:16 音乐啤酒 阅读(189) 评论(0) 推荐(0)
摘要: 存储过程有时候要实现比复杂的方法,其中有的手段就是要组合sql语句declare @TestSql nvarchar(1000)set @TestSql = 'select * from tablename'就像这种方式一样,当然上面的只是一个事例组合sql要先区分几种错误的概念1,对于表名,列名,字段名都是不能使用变量的。比如这个方式declare @tableName varchar(100)declare @Sql varchar(1000)set @tableName ='userinfo'set @Sql = 'select * from @t 阅读全文
posted @ 2008-11-01 07:20 音乐啤酒 阅读(427) 评论(0) 推荐(0)
摘要: ,fckeditor在本地开发比较简单了。参考一些信息就可以搞定1.服务端的部署。在服务器端部署的时候要检查权限,比如上传图片和上传文件的时候。我采用的方法是对文件夹右键安全中添加everyone的角色,而且要注意添加写入的权限。2.上传图片的问题,设置完权限以后,上传图片的时候,服务端明明已经上传上去了图片,但是页面还是一直显示正在上传。而且会有js错误,权限 不够。解决方法是这样的。我也是看人家的了。呵呵在编译FredCK.FCKeditorV2.dll之前的源代码里面的 FileWorkerBase.cs文件中的代码 中的 Response.Write( @"(function 阅读全文
posted @ 2008-10-29 03:53 音乐啤酒 阅读(303) 评论(0) 推荐(0)
摘要: 微软的消息队列已经在服务器版本的操作系统上好久了。这段时间研究如何面对大数据量的时候提高系统的访问性能,就想到了消息队列。原来在实现web聊天的时候我们就曾经使用过消息队列,因为消息队列天生的异步机制,读和写的分离使他适合处理大量消息读取但是不要求即时性很高的系统使用消息队列首先要在操作系统的添加组件中添加消息队列,在net平台下开发消息队列也比较简单,要专门添加引用system.messageing这个命名空间主要研究MessageQueue这个类消息队列分为好几种类型我们大部分使用的是私有队列,公共队列可能需要安装到工作组管理的机器应该和AD有关的创建私有队列是这样的System.Mess 阅读全文
posted @ 2008-10-11 00:05 音乐啤酒 阅读(657) 评论(0) 推荐(0)
摘要: 最近有个项目可能会把一些复合对象比如哈希表存储到数据库中,就提前做了一些测试一般图片,文件等存储到数据库中都是要先转换成字节流byte[]类型的。我想这个hastable之类的集合对象也不例外但是就是怎么转换的时候感觉难搞,最后终于是整理出了一个二进制转换帮助类,代码如下// <summary>///BinaryHelper 的摘要说明///二进制转换帮助类,一个是对象转换成byte,一个反过来/// </summary> public class BinaryHelper { private BinaryHelper() { } public static byte[ 阅读全文
posted @ 2008-09-25 02:42 音乐啤酒 阅读(860) 评论(0) 推荐(0)
摘要: 最近研究康盛的Unhome,一个SNS平台软件要用到Mysql这个软件,唉,开源的东西就是麻烦,开启日志都搞了半天刚开始只搞懂了开启更新之类的sql[mysqld]log-update = "文件位置。log"但是里面只有insert,update,delete之类的sql[mysqld]log=general-log这个是开启所有的sql事件跟踪。还有一个命令是清空日志文件的,直接在文件的文件夹目录下,输入echo >general-log就可以了。前提是要把mysql服务关闭掉真是折腾本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册 阅读全文
posted @ 2008-09-24 22:01 音乐啤酒 阅读(186) 评论(0) 推荐(0)