﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-kwj-文章分类-设计模式</title><link>http://www.blogjava.net/kwj/category/29105.html</link><description>蓝色旅行，与你携手！</description><language>zh-cn</language><lastBuildDate>Thu, 24 Jan 2008 08:57:41 GMT</lastBuildDate><pubDate>Thu, 24 Jan 2008 08:57:41 GMT</pubDate><ttl>60</ttl><item><title>单例模式</title><link>http://www.blogjava.net/kwj/articles/177284.html</link><dc:creator>木剑</dc:creator><author>木剑</author><pubDate>Wed, 23 Jan 2008 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/kwj/articles/177284.html</guid><wfw:comment>http://www.blogjava.net/kwj/comments/177284.html</wfw:comment><comments>http://www.blogjava.net/kwj/articles/177284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kwj/comments/commentRss/177284.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kwj/services/trackbacks/177284.html</trackback:ping><description><![CDATA[单例模式的要点：<br />
1.单例类只能有一个实例。<br />
2.它必须自行创建这个实例。<br />
3.单例类必须给其他所有对象提供该实例。<br />
public class EagerSingleton<br />
{<br />
&nbsp;&nbsp;&nbsp; private static final EagerSingleton m_instance=new EagerSingleton();<br />
&nbsp;&nbsp;&nbsp; private EagerSingleton(){}&nbsp; //私有<br />
&nbsp;&nbsp;&nbsp; public EagerSingleton getInstance()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return m_instance;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<img src ="http://www.blogjava.net/kwj/aggbug/177284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kwj/" target="_blank">木剑</a> 2008-01-23 15:21 <a href="http://www.blogjava.net/kwj/articles/177284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>抽象工厂模式</title><link>http://www.blogjava.net/kwj/articles/177271.html</link><dc:creator>木剑</dc:creator><author>木剑</author><pubDate>Wed, 23 Jan 2008 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/kwj/articles/177271.html</guid><wfw:comment>http://www.blogjava.net/kwj/comments/177271.html</wfw:comment><comments>http://www.blogjava.net/kwj/articles/177271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kwj/comments/commentRss/177271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kwj/services/trackbacks/177271.html</trackback:ping><description><![CDATA[public interface Gardener{}<br />
<br />
public class NorthernGardener implements Gardener<br />
{<br />
&nbsp;&nbsp;&nbsp; public Fruit creatFruit(String name)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new NorthernFruit(name);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public Veggie creatVeggie(String name)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new NorthernVeggie(name);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
public class TropicalGardener implements Gardener<br />
{<br />
&nbsp;&nbsp;&nbsp; public Fruit creatFruit(String name)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new TropicalFruit(name);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public Veggie creatVeggie(String name)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new TropicalVeggie(name);<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
public interface Veggie{}&nbsp; //蔬菜<br />
public class NothernVeggie implements Veggie<br />
{<br />
&nbsp;&nbsp;&nbsp; private String name;<br />
}<br />
public class TropicalVeggie implements Veggie<br />
{<br />
&nbsp;&nbsp;&nbsp; private String name;<br />
}<br />
<br />
public interface Fruit{}&nbsp; //水果<br />
public class NothernFruit implements Fruit<br />
{<br />
&nbsp;&nbsp;&nbsp; private String name;<br />
}<br />
public class TropicalFruit implements Fruit<br />
{<br />
&nbsp;&nbsp;&nbsp; private String name;<br />
}<br />
<br />
抽象工厂来源：button（UnixButton,WinButton），text（UnixText,WinText）两个等级结构。UnixButton和UnixText是Unix一族，由<br />
<br />
UnixFactory创建，WinButton和WinText是Window一族，应该有WinFactory来创建。<br />
<br />
需要增加一个产品族（如亚热带的水果和蔬菜），需要增加一个产品等级（肉类），考虑代码的变化。<br />
<img src ="http://www.blogjava.net/kwj/aggbug/177271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kwj/" target="_blank">木剑</a> 2008-01-23 14:42 <a href="http://www.blogjava.net/kwj/articles/177271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工厂方法模式</title><link>http://www.blogjava.net/kwj/articles/177213.html</link><dc:creator>木剑</dc:creator><author>木剑</author><pubDate>Wed, 23 Jan 2008 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/kwj/articles/177213.html</guid><wfw:comment>http://www.blogjava.net/kwj/comments/177213.html</wfw:comment><comments>http://www.blogjava.net/kwj/articles/177213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kwj/comments/commentRss/177213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kwj/services/trackbacks/177213.html</trackback:ping><description><![CDATA[public interface FruitGardener&nbsp; //园丁接口<br />
{<br />
&nbsp;&nbsp;&nbsp; public Fruit factory();<br />
}<br />
<br />
public class AppleGardener implements FruitGardener<br />
{<br />
&nbsp;&nbsp;&nbsp; public Fruit factory()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new Apple();<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
public class GrapeGardener implements FruitGardener<br />
{<br />
&nbsp;&nbsp;&nbsp; public Fruit factory()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new Grape();<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
public interface fruit()&nbsp; //水果接口<br />
{<br />
&nbsp;&nbsp;&nbsp; void grow();<br />
&nbsp;&nbsp;&nbsp; void harvest();<br />
&nbsp;&nbsp;&nbsp; void plant();<br />
}<br />
<br />
public class Apple implements Fruit<br />
{<br />
&nbsp;&nbsp;&nbsp; private int treeAge;<br />
&nbsp;&nbsp;&nbsp; public void grow(){}<br />
&nbsp;&nbsp;&nbsp; public void harvest(){}<br />
&nbsp;&nbsp;&nbsp; public void plant(){}<br />
}<br />
public class Grape implements Fruit<br />
{<br />
&nbsp;&nbsp;&nbsp; private boolean seedless;<br />
&nbsp;&nbsp;&nbsp; public void grow(){}<br />
&nbsp;&nbsp;&nbsp; public void harvest(){}<br />
&nbsp;&nbsp;&nbsp; public void plant(){}<br />
}<br />
<br />
所涉及角色：抽象工厂角色，具体工厂角色，抽象产品角色，具体产品角色。<br />
<br />
<br />
<img src ="http://www.blogjava.net/kwj/aggbug/177213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kwj/" target="_blank">木剑</a> 2008-01-23 10:56 <a href="http://www.blogjava.net/kwj/articles/177213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单工厂模式</title><link>http://www.blogjava.net/kwj/articles/177198.html</link><dc:creator>木剑</dc:creator><author>木剑</author><pubDate>Wed, 23 Jan 2008 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/kwj/articles/177198.html</guid><wfw:comment>http://www.blogjava.net/kwj/comments/177198.html</wfw:comment><comments>http://www.blogjava.net/kwj/articles/177198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kwj/comments/commentRss/177198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kwj/services/trackbacks/177198.html</trackback:ping><description><![CDATA[public interface Fruit&nbsp; //水果接口<br />
{<br />
&nbsp;&nbsp;&nbsp; void grow();<br />
&nbsp;&nbsp;&nbsp; void harvest();<br />
&nbsp;&nbsp;&nbsp; void plant();<br />
}<br />
<br />
public class Apple implements Fruit<br />
{<br />
&nbsp;&nbsp; private int treeAge;<br />
&nbsp;&nbsp; public grow(){}<br />
&nbsp;&nbsp; public harvest(){}<br />
&nbsp;&nbsp; public plant(){}<br />
}<br />
public class Grape implements Fruit<br />
{<br />
&nbsp;&nbsp;&nbsp; private boolean seedless;<br />
&nbsp;&nbsp;&nbsp; public void grow(){}<br />
&nbsp;&nbsp;&nbsp; public void harvest(){}<br />
&nbsp;&nbsp;&nbsp; public void plant(){}<br />
}<br />
<br />
public class FruitGardener&nbsp;&nbsp; //园丁<br />
{<br />
&nbsp;&nbsp;&nbsp; public static Fruit factory(String which)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  if(which.equalsIgnoreCase("apple")){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  return new Apple();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  else if(which.equalsIgnoreCase("grape")){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  return new Grape();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
所涉及到的角色：工厂角色，抽象产品角色，具体产品角色。<br />
统一由FruitGardener.factory的工厂方法来生产。该模式如果需要加入新的水果类时，工厂的代码需要改变。园丁成为了核心人物，如果他们不能工作，整个过程都受影响。<br />
<br />
<img src ="http://www.blogjava.net/kwj/aggbug/177198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kwj/" target="_blank">木剑</a> 2008-01-23 10:02 <a href="http://www.blogjava.net/kwj/articles/177198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>