<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[木子屋[Dnawo's BLOG]]]></title>
  <subtitle type="html"><![CDATA[Talents come from diligence, and knowledge is gained by accumulation.]]></subtitle>
  <id>http://www.mzwu.com/</id>
  <link rel="alternate" type="text/html" href="http://www.mzwu.com/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.mzwu.com/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.8">PJBlog3</generator> 
  <updated>2010-03-09T18:58:27+08:00</updated>

  <entry>
	  <title type="html"><![CDATA[C#设计模式-建造者模式]]></title>
	  <author>
		 <name>dnawo</name>
		 <uri>http://www.mzwu.com/</uri>
		 <email>dnawo@sohu.com</email>
	  </author>
	  <category term="" scheme="http://www.mzwu.com/default.asp?cateID=17" label="设计模式" /> 
	  <updated>2010-03-09T18:58:27+08:00</updated>
	  <published>2010-03-09T18:58:27+08:00</published>
		  <summary type="html"><![CDATA[<span style="color:Brown">1.定义</span><br/><br/>将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。<br/><br/><span style="color:Brown">2.UML图</span><br/><br/><img src="http://www.mzwu.com/pic/201003/028.gif" border="0" alt=""/><br/><br/><span style="color:Brown">3.代码</span><br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code85381);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.mzwu.com/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code85381>using System;<br/><br/>namespace ConsoleApplication1<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builder builder = new ConcreteBuilder();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Director director = new Director(builder);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product product = builder.GetResult();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 指挥者<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Director<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public Director(Builder builder)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.BuildPartA();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.BuildPartB();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;组装Product对象！&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 抽象建造者类<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;abstract class Builder<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public abstract void BuildPartA();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public abstract void BuildPartB();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public abstract Product GetResult();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体建造者<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ConcreteBuilder : Builder<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product product = new Product();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override void BuildPartA()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//组装Product对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override void BuildPartB()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//组装Product对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override Product GetResult()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;返回Product对象！&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return product;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 产品父类<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Product<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/>}</div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.mzwu.com/article.asp?id=2394" /> 
	  <id>http://www.mzwu.com/default.asp?id=2394</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[C#设计模式-抽象工厂模式 ]]></title>
	  <author>
		 <name>dnawo</name>
		 <uri>http://www.mzwu.com/</uri>
		 <email>dnawo@sohu.com</email>
	  </author>
	  <category term="" scheme="http://www.mzwu.com/default.asp?cateID=17" label="设计模式" /> 
	  <updated>2010-03-09T17:45:18+08:00</updated>
	  <published>2010-03-09T17:45:18+08:00</published>
		  <summary type="html"><![CDATA[<span style="color:Brown">1.定义</span><br/><br/>提供一个创建一系列相关或相互依赖对象的接口，而无需指定它们具体的类。<br/><br/><span style="color:Brown">2.UML图</span><br/><br/><img src="http://www.mzwu.com/pic/201003/027.gif" border="0" alt=""/><br/><br/><span style="color:Brown">3.代码</span><br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code83821);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.mzwu.com/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code83821>using System;<br/><br/>namespace ConsoleApplication1<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractProductA pa;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractProductB pb;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractFactory f1 = new ConcreteFactory1();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pa = f1.Cr&#101;ateProductA();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pb = f1.Cr&#101;ateProductB();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractFactory f2 = new ConcreteFactory2();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pa = f2.Cr&#101;ateProductA();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pb = f2.Cr&#101;ateProductB();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 抽象工厂<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;abstract class AbstractFactory<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public abstract AbstractProductA Cr&#101;ateProductA();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public abstract AbstractProductB Cr&#101;ateProductB();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体工厂<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ConcreteFactory1 : AbstractFactory<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override AbstractProductA Cr&#101;ateProductA()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;创建并返回ProductA1实例！&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new ProductA1();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override AbstractProductB Cr&#101;ateProductB()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;创建并返回ProductB1实例！&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new ProductB1();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体工厂<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ConcreteFactory2 : AbstractFactory<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override AbstractProductA Cr&#101;ateProductA()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;创建并返回ProductA2实例！&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new ProductA2();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override AbstractProductB Cr&#101;ateProductB()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;创建并返回ProductB2实例！&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new ProductB2();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 抽象产品<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class AbstractProductA<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体产品<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ProductA1 : AbstractProductA<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体产品<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ProductA2 : AbstractProductA<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 抽象产品<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class AbstractProductB<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体产品<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ProductB1 : AbstractProductB<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体产品<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ProductB2 : AbstractProductB<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/>}</div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.mzwu.com/article.asp?id=2393" /> 
	  <id>http://www.mzwu.com/default.asp?id=2393</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[C#设计模式-工厂方法模式]]></title>
	  <author>
		 <name>dnawo</name>
		 <uri>http://www.mzwu.com/</uri>
		 <email>dnawo@sohu.com</email>
	  </author>
	  <category term="" scheme="http://www.mzwu.com/default.asp?cateID=17" label="设计模式" /> 
	  <updated>2010-03-09T17:31:43+08:00</updated>
	  <published>2010-03-09T17:31:43+08:00</published>
		  <summary type="html"><![CDATA[<span style="color:Brown">1.定义</span><br/><br/>定义一个用于创建对象的接口，让子类决定将哪一个类实例化。它使一个类的实例化延迟到其子类。<br/><br/><span style="color:Brown">2.UML图</span><br/><br/><img src="http://www.mzwu.com/pic/201003/026.gif" border="0" alt=""/><br/><br/><span style="color:Brown">3.代码</span><br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code23342);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.mzwu.com/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code23342>using System;<br/><br/>namespace ConsoleApplication1<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Factory c1 = new ConcreteFactory1();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product p1 = c1.Cr&#101;ate();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Factory c2 = new ConcreteFactory2();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product p2 = c2.Cr&#101;ate();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 抽象工厂<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;abstract class Factory<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public abstract Product Cr&#101;ate();<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体工厂<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ConcreteFactory1 : Factory<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override Product Cr&#101;ate()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;创建并返回ConcreteProduct1实例！&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new ConcreteProduct1();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体工厂<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ConcreteFactory2 : Factory<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public override Product Cr&#101;ate()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;创建并返回ConcreteProduct2实例！&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new ConcreteProduct2();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 产品父类<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Product<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体产品<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ConcreteProduct1 : Product<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体产品<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ConcreteProduct2 : Product<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/>}</div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.mzwu.com/article.asp?id=2392" /> 
	  <id>http://www.mzwu.com/default.asp?id=2392</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[C#设计模式-简单工厂模式]]></title>
	  <author>
		 <name>dnawo</name>
		 <uri>http://www.mzwu.com/</uri>
		 <email>dnawo@sohu.com</email>
	  </author>
	  <category term="" scheme="http://www.mzwu.com/default.asp?cateID=17" label="设计模式" /> 
	  <updated>2010-03-09T17:29:31+08:00</updated>
	  <published>2010-03-09T17:29:31+08:00</published>
		  <summary type="html"><![CDATA[<span style="color:Brown">1.定义</span><br/><br/>根据提供给它的数据，返回几个可能类中的一个类的实例。<br/><br/><span style="color:Brown">2.UML图</span><br/><br/><img src="http://www.mzwu.com/pic/201003/025.gif" border="0" alt=""/><br/><br/><span style="color:Brown">3.代码</span><br/><br/><div class="UBBPanel codePanel"><div class="UBBTitle"><a onClick="copycode(code71054);" style="float:right;cursor: pointer;font-weight: normal; font-style: normal">复制内容到剪贴板</a><img src="http://www.mzwu.com/images/code.gif" style="margin:0px 2px -3px 0px;" alt="程序代码"/> 程序代码</div><div class="UBBContent" id=code71054>using System;<br/><br/>namespace ConsoleApplication1<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Program<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product p;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = Factory.Cr&#101;ate(&#34;product1&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p = Factory.Cr&#101;ate(&#34;product2&#34;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.ReadKey();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 工厂类<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Factory<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static Product Cr&#101;ate(string type)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (type == &#34;product1&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;创建并返回ConcreteProduct1实例！&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new ConcreteProduct1();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (type == &#34;product2&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(&#34;创建并返回ConcreteProduct2实例！&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new ConcreteProduct2();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 产品父类<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class Product<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体产品<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ConcreteProduct1 : Product<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// 具体产品<br/>&nbsp;&nbsp;&nbsp;&nbsp;/// &lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;class ConcreteProduct2 : Product<br/>&nbsp;&nbsp;&nbsp;&nbsp;{ }<br/>}</div></div>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.mzwu.com/article.asp?id=2391" /> 
	  <id>http://www.mzwu.com/default.asp?id=2391</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[戏说23种设计模式]]></title>
	  <author>
		 <name>dnawo</name>
		 <uri>http://www.mzwu.com/</uri>
		 <email>dnawo@sohu.com</email>
	  </author>
	  <category term="" scheme="http://www.mzwu.com/default.asp?cateID=17" label="设计模式" /> 
	  <updated>2010-03-08T18:57:41+08:00</updated>
	  <published>2010-03-08T18:57:41+08:00</published>
		  <summary type="html"><![CDATA[<span style="color:Brown">工厂方法模式：</span>定义一个用于创建对象的接口，让子类决定将哪一个类实例化。它使一个类的实例化延迟到其子类。<br/><span style="color:Brown">抽象工厂模式：</span>提供一个创建一系列相关或相互依赖对象的接口，而无需指定它们具体的类。 <br/><span style="color:Brown">建造模式：</span>将一个复杂对象的构建与它的表示分离，使得同样的构建过程可以创建不同的表示。<br/><span style="color:Brown">原型模式：</span>用原型实例指定创建对象的种类，并且通过拷贝这个原型来创建新的对象。 <br/><span style="color:Brown">单例模式：</span>保证一个类仅有一个实例，并提供一个访问它的全局访问点。<br/><span style="color:Brown">适配器模式：</span>将一个类的接口转换成客户希望的另外一个接口。它使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。<br/><span style="color:Brown">桥接模式：</span>将抽象部分与它的实现部分分离，使它们都可以独立地变化。<br/><span style="color:Brown">组合模式：</span>将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。 <br/><span style="color:Brown">装饰模式：</span>动态地给一个对象添加一些额外的职责。就扩展功能而言，它比生成子类方式更为灵活。 <br/><span style="color:Brown">外观模式：</span>为子系统中的一组接口提供一个一致的界面， 它定义了一个高层接口，这个接口使得这一子系统更加容易使用。 <br/><span style="color:Brown">享元模式：</span>运用共享技术有效地支持大量细粒度的对象。 <br/><span style="color:Brown">代理模式：</span>为其他对象提供一个代理以控制对这个对象的访问。<br/><span style="color:Brown">观察者模式：</span>定义对象间的一种一对多的依赖关系，以便当一个对象的状态发生改变时，所有依赖于它的对象都得到通知并自动更新。<br/><span style="color:Brown">模板方法模式：</span>定义一个操作中的算法的骨架，而将一些步骤延迟到子类中。它使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 <br/><span style="color:Brown">命令模式：</span>将一个请求封装为一个对象，从而使你可用不同的请求对客户进行参数化；对请求排队或记录请求日志，以及支持可取消的操作。 <br/><span style="color:Brown">状态模式：</span>允许一个对象在其内部状态改变时改变它的行为，让对象看起来似乎修改了它所属的类。<br/><span style="color:Brown">职责链模式：</span>为解除请求的发送者和接收者之间耦合，而使多个对象都有机会处理这个请求。将这些对象连成一条链，并沿着这条链传递该请求，直到有一个对象处理它。 <br/><span style="color:Brown">解释器模式：</span>给定一个语言， 定义它的文法的一种表示，并定义一个解释器， 该解释器使用该表示来解释语言中的句子。<br/><span style="color:Brown">中介模式：</span>用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用，从而使其耦合松散，而且可以独立地改变它们之间的交互。<br/><span style="color:Brown">访问者模式：</span>表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 <br/><span style="color:Brown">策略模式：</span>定义一系列的算法，把它们一个个封装起来， 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。<br/><span style="color:Brown">备忘录模式：</span>在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 <br/><span style="color:Brown">迭代器模式：</span>提供一种方法顺序访问一个聚合对象中各个元素， 而又不需暴露该对象的内部表示。<br/><br/><strong>从追MM中看设计模式：</strong><br/><br/><span style="color:Brown">简单工厂模式：</span>追MM少不了请吃饭了，麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西，虽然口味有所不同，但不管你带MM去麦当劳或肯德基，只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory。<br/><span style="color:Brown">工厂方法模式：</span>请MM去麦当劳吃汉堡，不同的MM有不同的口味，要每个都记住是一件烦人的事情，我一般采用工厂方法模式，带着MM到服务员那儿，说“要一个汉堡”，具体要什么样的汉堡呢，让MM直接跟服务员说就行了。<br/><span style="color:Brown">建造模式：</span>MM最爱听的就是“我爱你”这句话了，见到不同地方的MM，要能够用她们的方言跟她说这句话哦，我有一个多种语言翻译机，上面每种语言都有一个按键，见到MM我只要按对应的键，它就能够用相应的语言说出“我爱你”这句话了，国外的MM也可以轻松搞掂，这就是我的“我爱你”builder(这一定比美军在伊拉克用的翻译机好卖)。<br/><span style="color:Brown">原型模式：</span>跟MM用QQ聊天，一定要说些深情的话语了，我搜集了好多肉麻的情话，需要时只要copy出来放到QQ里面就行了，这就是我的情话prototype了(100块钱一份，你要不要)。<br/><span style="color:Brown">单例模式：</span>俺有6个漂亮的老婆，她们的老公都是我，我就是我们家里的老公Sigleton，她们只要说道“老公”，都是指的同一个人，那就是我(刚才做了个梦啦，哪有这么好的事)。<br/><span style="color:Brown">适配器模式：</span>在朋友聚会上碰到了一个美女Sarah，从香港来的，可我不会说粤语，她不会说普通话，只好求助于我的朋友kent了，他作为我和Sarah之间的Adapter，让我和Sarah可以相互交谈了(也不知道他会不会耍我)。<br/><span style="color:Brown">桥接模式：</span>早上碰到MM，要说早上好，晚上碰到MM，要说晚上好；碰到MM穿了件新衣服，要说你的衣服好漂亮哦，碰到MM新做的发型，要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题，自己用BRIDGE组合一下不就行了。<br/><span style="color:Brown">组合模式：</span>Mary今天过生日。“我过生日，你要送我一件礼物。”“嗯，好吧，去商店，你自己挑。”“这件T恤挺漂亮，买，这条裙子好看，买，这个包也不错，买。”“喂，买了三件了呀，我只答应送一件礼物的哦。”“什么呀，T恤加裙子加包包，正好配成一套呀，小姐，麻烦你包起来。”“……”，MM都会用Composite模式了，你会了没有？<br/><span style="color:Brown">装饰模式：</span>Mary过完轮到Sarly过生日，还是不要叫她自己挑了，不然这个月伙食费肯定玩完，拿出我去年在华山顶上照的照片，在背面写上“最好的的礼物，就是爱你的Fita”，再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦)，再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装起来……，我们都是Decorator，最终都在修饰我这个人呀，怎么样，看懂了吗？<br/><span style="color:Brown">外观模式：</span>我有一个专业的Nikon相机，我就喜欢自己手动调光圈、快门，这样照出来的照片才专业，但MM可不懂这些，教了半天也不会。幸好相机有Facade设计模式，把相机调整到自动档，只要对准目标按快门就行了，一切由相机自动调整，这样MM也可以用这个相机给我拍张照片了。<br/><span style="color:Brown">享元模式：</span>每天跟MM发短信，手指都累死了，最近买了个新手机，可以把一些常用的句子存在手机里，要用的时候，直接拿出来，在前面加上MM的名字就可以发送了，再不用一个字一个字敲了。共享的句子就是Flyweight，MM的名字就是提取出来的外部特征，根据上下文情况使用。<br/><span style="color:Brown">代理模式：</span>跟MM在网上聊天，一开头总是“hi,你好”,“你从哪儿来呀？”“你多大了？”“身高多少呀？”这些话，真烦人，写个程序做为我的Proxy吧，凡是接收到这些话都设置好了自己的回答，接收到其他的话时再通知我回答，怎么样，酷吧。<br/><span style="color:Brown">观察者模式：</span>想知道咱们公司最新MM情报吗？加入公司的MM情报邮件组就行了，tom负责搜集情报，他发现的新情报不用一个一个通知我们，直接发布给邮件组，我们作为订阅者(观察者)就可以及时收到情报啦。 <br/><span style="color:Brown">模板方法模式：</span>看过《如何说服女生上床》这部经典文章吗？女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八大步骤(Template method)，但每个步骤针对不同的情况，都有不一样的做法，这就要看你随机应变啦(具体实现)。<br/><span style="color:Brown">命令模式：</span>俺有一个MM家里管得特别严，没法见面，只好借助于她弟弟在我们俩之间传送信息，她对我有什么指示，就写一张纸条让她弟弟带给我。这不，她弟弟又传送过来一个COMMAND，为了感谢他，我请他吃了碗杂酱面，哪知道他说：“我同时给我姐姐三个男朋友送COMMAND，就数你最小气，才请我吃面”。<br/><span style="color:Brown">状态模式：</span>跟MM交往时，一定要注意她的状态哦，在不同的状态时她的行为会有不同，比如你约她今天晚上去看电影，对你没兴趣的MM就会说“有事情啦”，对你不讨厌但还没喜欢上的MM就会说“好啊，不过可以带上我同事么？”，已经喜欢上你的MM就会说“几点钟？看完电影再去泡吧怎么样？”，当然你看电影过程中表现良好的话，也可以把MM的状态从不讨厌不喜欢变成喜欢哦。<br/><span style="color:Brown">职责链模式：</span>晚上去上英语课，为了好开溜坐到了最后一排，哇，前面坐了好几个漂亮的MM哎，找张纸条，写上“Hi,可以做我的女朋友吗？如果不愿意请向前传”，纸条就一个接一个的传上去了，糟糕，传到第一排的MM把纸条传给老师了，听说是个老处女呀，快跑!<br/><span style="color:Brown">解释器模式：</span>俺有一个《泡MM真经》，上面有各种泡MM的攻略，比如说去吃西餐的步骤、去看电影的方法等等，跟MM约会时，只要做一个Interpreter，照着上面的脚本执行就可以了。<br/><span style="color:Brown">中介模式：</span>四个MM打麻将，相互之间谁应该给谁多少钱算不清楚了，幸亏当时我在旁边，按照各自的筹码数算钱，赚了钱的从我这里拿，赔了钱的也付给我，一切就OK啦，俺得到了四个MM的电话。<br/><span style="color:Brown">访问者模式：</span>情人节到了，要给每个MM送一束鲜花和一张卡片，可是每个MM送的花都要针对她个人的特点，每张卡片也要根据个人的特点来挑，我一个人哪搞得清楚，还是找花店老板和礼品店老板做一下Visitor，让花店老板根据MM的特点选一束花，让礼品店老板也根据每个人特点选一张卡，这样就轻松多了。<br/><span style="color:Brown">策略模式：</span>跟不同类型的MM约会，要用不同的策略，有的请电影比较好，有的则去吃小吃效果不错，有的去海边浪漫最合适，单目的都是为了得到MM的芳心，我的追MM锦囊中有好多Strategy哦。<br/><span style="color:Brown">备忘录模式：</span>同时跟几个MM聊天时，一定要记清楚刚才跟MM说了些什么话，不然MM发现了会不高兴的哦，幸亏我有个备忘录，刚才与哪个MM说了什么话我都拷贝一份放到备忘录里面保存，这样可以随时察看以前的记录啦。<br/><span style="color:Brown">迭代器模式：</span>我爱上了Mary，不顾一切的向她求婚。&nbsp;&nbsp; Mary：“想要我跟你结婚，得答应我的条件”&nbsp;&nbsp; 我：“什么条件我都答应，你说吧”&nbsp;&nbsp; Mary：“我看上了那个一克拉的钻石”&nbsp;&nbsp; 我：“我买，我买，还有吗？”&nbsp;&nbsp; Mary：“我看上了湖边的那栋别墅”&nbsp;&nbsp; 我：“我买，我买，还有吗？”&nbsp;&nbsp; Mary：“我看上那辆法拉利跑车”&nbsp;&nbsp; 我脑袋嗡的一声，坐在椅子上，一咬牙：“我买，我买，还有吗？”&nbsp;&nbsp; ……]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.mzwu.com/article.asp?id=2390" /> 
	  <id>http://www.mzwu.com/default.asp?id=2390</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[用记事本查看网页源文件提示：拒绝访问！]]></title>
	  <author>
		 <name>dnawo</name>
		 <uri>http://www.mzwu.com/</uri>
		 <email>dnawo@sohu.com</email>
	  </author>
	  <category term="" scheme="http://www.mzwu.com/default.asp?cateID=10" label="操作系统" /> 
	  <updated>2010-03-05T14:23:59+08:00</updated>
	  <published>2010-03-05T14:23:59+08:00</published>
		  <summary type="html"><![CDATA[从前天安装Mcafee后，机子的怪事就接二连三的来，这不，刚发现不能用记事本查看网页源文件了，提示拒绝访问：<br/><br/><img src="http://www.mzwu.com/pic/201003/022.gif" border="0" alt=""/><br/><br/>直觉又是Mcafee在搞鬼，查看下访问保护日志：<br/><br/><img src="http://www.mzwu.com/pic/201003/023.gif" border="0" alt=""/><br/><br/>找着了这么一句：<br/><br/><div class="UBBPanel quotePanel"><div class="UBBTitle"><img src="http://www.mzwu.com/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">2010-3-5&#160;&#160;&#160;&#160;14:11:55&#160;&#160;&#160;&#160;已由访问保护规则禁止 &#160;&#160;&#160;&#160;ADMIN-05BF84DE4\administrator2&#160;&#160;&#160;&#160;C:\WINDOWS\system32\notepad.exe&#160;&#160;&#160;&#160;C:\Documents and Settings\administrator2.ADMIN-05BF84DE4\Local Settings\Temporary Internet Files\Content.IE5\2R4B21AZ\www.baidu[1]&#160;&#160;&#160;&#160;防病毒最大保护:保护缓存文件免受密码和电子邮件地址窃贼的攻击&#160;&#160;&#160;&#160;已阻止的操作: 读取</div></div><br/>好，打开Mcafee&#34;访问保护&#34;属性，定位到&#34;防病毒最大保护:保护缓存文件免受密码和电子邮件地址窃贼的攻击&#34;，点击编辑，加入&#34;notepad.exe&#34;：<br/><br/><img src="http://www.mzwu.com/pic/201003/024.gif" border="0" alt=""/><br/><br/>确定保存，再尝试用记事本查看网页源文件，正常了:)]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.mzwu.com/article.asp?id=2389" /> 
	  <id>http://www.mzwu.com/default.asp?id=2389</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[全面认识UML类图元素]]></title>
	  <author>
		 <name>dnawo</name>
		 <uri>http://www.mzwu.com/</uri>
		 <email>dnawo@sohu.com</email>
	  </author>
	  <category term="" scheme="http://www.mzwu.com/default.asp?cateID=5" label="网络编程" /> 
	  <updated>2010-03-04T11:49:54+08:00</updated>
	  <published>2010-03-04T11:49:54+08:00</published>
		  <summary type="html"><![CDATA[开发Java应用程序时，开发者要想有效地利用统一建模语言(UML)，必须全面理解UML元素以及这些元素如何映射到Java。本文重点讨论UML类图中的元素。<br/><br/>类图是最常用的UML图，它用于描述系统的结构化设计。其中包括类关系以及与每个类关联的属性及行为。类图能出色地表示继承与合成关系。为了将类图作为一种高效的沟通工具使用，开发者必须理解如何将类图上出现的元素转换到Java中。下面来进一步探索这一转换过程。<br/><br/><strong>元素</strong><br/><br/>在后面的小节中，分别讲解了类图的各个元素及其在Java中相应的表示。我会列出元素名，后续简短的代码片断和一幅图来表示元素在类图上的样子。每一节的最后简要总结了该元素。<br/><br/><span style="color:Brown">类(Class)</span><br/><br/>类(图A)是对象的蓝图，其中包含3个组成部分。第一个是Java中定义的类名。第二个是属性(attributes)。第三个是该类提供的方法。<br/><br/>属性和操作之前可附加一个可见性修饰符。加号(+)表示具有公共可见性。减号(-)表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有package(包)级别的可见性。如果属性或操作具有下划线，表明它是静态的。在操作中，可同时列出它接受的参数，以及返回类型，如图A的&#34;Java&#34;区域所示。<br/><br/><img src="http://www.mzwu.com/pic/201003/013.gif" border="0" alt=""/><br/>图A<br/><br/><span style="color:Brown">包(Package)</span> <br/><br/>包(图B)是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中，一个包可能含有其他包、类或者同时含有这两者。进行建模时，你通常拥有逻辑性的包，它主要用于对你的模型进行组织。你还会拥有物理性的包，它直接转换成系统中的Java包。每个包的名称对这个包进行了惟一性的标识。 <br/><br/><img src="http://www.mzwu.com/pic/201003/014.gif" border="0" alt=""/><br/>图B<br/><br/><span style="color:Brown">接口(Interface)</span> <br/><br/>接口(图C)是一系列操作的集合，它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口既可用图C的那个图标来表示，也可由附加了&lt;&gt;的一个标准类来表示。通常，根据接口在类图上的样子，就能知道与其他类的关系。 <br/><br/><img src="http://www.mzwu.com/pic/201003/015.gif" border="0" alt=""/><br/>图C<br/><br/><strong>关系</strong><br/><br/>后面的例子将针对某个具体目的来独立地展示各种关系。虽然语法无误，但这些例子可进一步精炼，在它们的有效范围内包括更多的语义。<br/><br/><span style="color:Brown">依赖关系(Dependency)</span><br/><br/>实体之间一个&#34;使用&#34;关系暗示一个实体的规范发生变化后，可能影响依赖于它的其他实例(图D)。更具体地说，它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量，对通过方法调用而获得的一个对象的引用(如下例所示)，或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用&#34;依赖&#34;来表示包和包之间的关系。由于包中含有类，所以你可根据那些包中的各个类之间的关系，表示出包和包的关系。<br/><br/><img src="http://www.mzwu.com/pic/201003/016.gif" border="0" alt=""/><br/>图D<br/><br/><span style="color:Brown">关联(Association)</span><br/><br/>实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的，它用于指定导航能力。如果没有箭头，暗示是一种双向的导航能力。在Java中，关联(图E)转换为一个实例作用域的变量，就像图E的&#34;Java&#34;区域所展示的代码那样。可为一个关联附加其他修饰符。多重性(Multiplicity)修饰符暗示着实例之间的关系。在示范代码中，Employee可以有0个或更多的TimeCard对象。但是，每个TimeCard只从属于单独一个Employee。<br/><br/><img src="http://www.mzwu.com/pic/201003/017.gif" border="0" alt=""/><br/>图E<br/><br/><span style="color:Brown">聚合(Aggregation)</span><br/><br/>聚合(图F)是关联的一种形式，代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别，而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。<br/><br/>关联和聚合的区别纯粹是概念上的，而且严格反映在语义上。聚合还暗示着实例图中不存在回路。换言之，只能是一种单向关系。<br/><br/><img src="http://www.mzwu.com/pic/201003/018.gif" border="0" alt=""/><br/>图F<br/><br/><span style="color:Brown">合成(Composition)</span><br/><br/>合成 (图G)是聚合的一种特殊形式，暗示&#34;局部&#34;在&#34;整体&#34;内部的生存期职责。合成也是非共享的。所以，虽然局部不一定要随整体的销毁而被销毁，但整体要么负责保持局部的存活状态，要么负责将其销毁。局部不可与其他整体共享。但是，整体可将所有权转交给另一个对象，后者随即将承担生存期职责。<br/>Employee和TimeCard的关系或许更适合表示成&#34;合成&#34;，而不是表示成&#34;关联&#34;。<br/><br/><img src="http://www.mzwu.com/pic/201003/019.gif" border="0" alt=""/><br/>图G<br/><br/><span style="color:Brown">泛化(Generalization)</span><br/><br/>泛化(图H)表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中，用extends关键字来直接表示这种关系。<br/><br/><img src="http://www.mzwu.com/pic/201003/020.gif" border="0" alt=""/><br/>图H<br/><br/><span style="color:Brown">实现(Realization)</span><br/><br/>实例(图I)关系指定两个实体之间的一个合同。换言之，一个实体定义一个合同，而另一个实体保证履行该合同。对Java应用程序进行建模时，实现关系可直接用implements关键字来表示。<br/><br/><img src="http://www.mzwu.com/pic/201003/021.gif" border="0" alt=""/><br/>图I<br/><br/>如本文所述，UML类图上的元素能精确映射到Java编程语言。开发团队的成员可利用这种精确性来加强沟通，取得对系统结构化设计的共识。]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.mzwu.com/article.asp?id=2388" /> 
	  <id>http://www.mzwu.com/default.asp?id=2388</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[电子地图几例应用]]></title>
	  <author>
		 <name>dnawo</name>
		 <uri>http://www.mzwu.com/</uri>
		 <email>dnawo@sohu.com</email>
	  </author>
	  <category term="" scheme="http://www.mzwu.com/default.asp?cateID=2" label="其他" /> 
	  <updated>2010-03-03T16:56:33+08:00</updated>
	  <published>2010-03-03T16:56:33+08:00</published>
		  <summary type="html"><![CDATA[·公交线路-福建票务网(<a href="http://www.fjpww.com/" target="_blank" rel="external">http://www.fjpww.com/</a>)<br/><img src="http://www.mzwu.com/pic/201003/012.gif" border="0" alt=""/><br/><br/>·房屋出租-口碑网(<a href="http://fuzhou.koubei.com/" target="_blank" rel="external">http://fuzhou.koubei.com/</a>)<br/><img src="http://www.mzwu.com/pic/201003/011.gif" border="0" alt=""/><br/><br/>·移动交友-贝多(<a href="http://www.bedo.cn/" target="_blank" rel="external">http://www.bedo.cn/</a>)<br/><img src="http://www.mzwu.com/pic/201003/010.gif" border="0" alt=""/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.mzwu.com/article.asp?id=2387" /> 
	  <id>http://www.mzwu.com/default.asp?id=2387</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[Windows2008下IIS7.0的安装]]></title>
	  <author>
		 <name>dnawo</name>
		 <uri>http://www.mzwu.com/</uri>
		 <email>dnawo@sohu.com</email>
	  </author>
	  <category term="" scheme="http://www.mzwu.com/default.asp?cateID=7" label="服务器" /> 
	  <updated>2010-03-03T13:54:42+08:00</updated>
	  <published>2010-03-03T13:54:42+08:00</published>
		  <summary type="html"><![CDATA[1.打开&#34;控制面板→管理工具→服务器管理器&#34;，选择&#34;角色&#34;，在右边点击&#34;添加角色&#34;：<br/><img src="http://www.mzwu.com/pic/201003/005.gif" border="0" alt=""/><br/><br/>2.在&#34;选择服务器角色&#34;界面中钩选&#34;Web 服务器&#34;，点下一步：<br/><img src="http://www.mzwu.com/pic/201003/006.gif" border="0" alt=""/><br/><br/>3.在&#34;选择角色服务&#34;界面中钩选&#34;应用程序开发&#34;，之后开始安装：<br/><img src="http://www.mzwu.com/pic/201003/007.gif" border="0" alt=""/><br/><br/><img src="http://www.mzwu.com/pic/201003/008.gif" border="0" alt=""/><br/><br/>IIS7预览：<br/><img src="http://www.mzwu.com/pic/201003/009.gif" border="0" alt=""/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.mzwu.com/article.asp?id=2386" /> 
	  <id>http://www.mzwu.com/default.asp?id=2386</id>
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[您的帐号设置了QQ登录保护，登录时需要验证密保资料。]]></title>
	  <author>
		 <name>dnawo</name>
		 <uri>http://www.mzwu.com/</uri>
		 <email>dnawo@sohu.com</email>
	  </author>
	  <category term="" scheme="http://www.mzwu.com/default.asp?cateID=2" label="其他" /> 
	  <updated>2010-03-03T10:53:53+08:00</updated>
	  <published>2010-03-03T10:53:53+08:00</published>
		  <summary type="html"><![CDATA[使用QQ2008登录时出现了如下提示：<br/><br/><img src="http://www.mzwu.com/pic/201003/001.gif" border="0" alt=""/><br/><br/>解决方法：登录QQ安全中心，暂时关闭QQ登录保护。步骤如下：<br/><br/><img src="http://www.mzwu.com/pic/201003/002.gif" border="0" alt=""/><br/><br/><img src="http://www.mzwu.com/pic/201003/003.gif" border="0" alt=""/><br/><br/><img src="http://www.mzwu.com/pic/201003/004.gif" border="0" alt=""/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.mzwu.com/article.asp?id=2385" /> 
	  <id>http://www.mzwu.com/default.asp?id=2385</id>
  </entry>	
		
</feed>
