﻿<?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-努力创造未来！-随笔分类-Patterns</title><link>http://www.blogjava.net/pdw2009/category/12603.html</link><description>J2EE相关应用技术日志</description><language>zh-cn</language><lastBuildDate>Tue, 25 Sep 2007 20:52:46 GMT</lastBuildDate><pubDate>Tue, 25 Sep 2007 20:52:46 GMT</pubDate><ttl>60</ttl><item><title>设计模式之行为</title><link>http://www.blogjava.net/pdw2009/archive/2007/09/24/147927.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Mon, 24 Sep 2007 15:36:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/09/24/147927.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/147927.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/09/24/147927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/147927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/147927.html</trackback:ping><description><![CDATA[类是没有行为的，只有对象才可能有行为，但对象的行为肯定是由类来定义的。<br />
今天讲要10个行为设计模式，记下它们的思想！<br />
1、<span lang="EN-US">Template<o:p></o:p></span>（模版）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中.<o:p></o:p> 如Struts中的execute()方法，通俗的说法是在父类的方法中，调用操象的方法。而操象的方法是由实现类来实现。<br />
<br />
2、<span lang="EN-US">Memento</span>（备忘录模式）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 备忘录模录实际上是对象内部状态的拷贝，运行到某个时候可以恢复它原有的状态，在实际开发中我们经常会用到该模式，但写法可能不一样。<br />
3、<span lang="EN-US"><span lang="EN-US">Observer<o:p></o:p></span>（临听模式）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 别人说是观察者，我喜欢说这是监听模式，就是设置一个对象的监听对象，当被监听对象的状态改变时触发一个事件，JDK已经提供实现了。需要用到时GOOGLE一样就OK。<br />
4、<span lang="EN-US">Chain of Responsibility</span>（职责链）<br />
&nbsp;&nbsp;&nbsp; 就是一个对象当作一个参数传递给不同的对进行职责处理。<br />
5、<span lang="EN-US">Command<o:p></o:p></span>（命令模式）<br />
&nbsp;&nbsp;&nbsp; 就看具体封装了，实际开发中用一得也挺多。<br />
6、<span lang="EN-US">State<o:p></o:p></span>（状态模式）<br />
&nbsp;&nbsp;&nbsp; <br />
7、<span lang="EN-US">Strategy(策略)<o:p></o:p></span><br />
&nbsp;&nbsp;&nbsp; 是对算法的一种封装<br />
8、<span lang="EN-US">Mediator(中介者)<o:p></o:p></span><br />
&nbsp;&nbsp; 各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉及到修改很多其他对象的行为,如果使用Mediator模式,可以使各个对象间的耦合松散,只需关心和 Mediator的关系,使多对多的关系变成了一对多的关系,可以降低系统的复杂性,提高可修改扩展性.<o:p></o:p>
<p>9、<span lang="EN-US">Interpreter(解释器)<o:p></o:p></span><br />
10、<strong><span lang="EN-US">Visitor（参观者模式）<br />
就是遍历类集中的对象吧</span></strong></p>
<br />
</span>
<img src ="http://www.blogjava.net/pdw2009/aggbug/147927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-09-24 23:36 <a href="http://www.blogjava.net/pdw2009/archive/2007/09/24/147927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之结构</title><link>http://www.blogjava.net/pdw2009/archive/2007/09/22/147410.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Sat, 22 Sep 2007 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/09/22/147410.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/147410.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/09/22/147410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/147410.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/147410.html</trackback:ping><description><![CDATA[结构模式有7个小模式，下面分别说一下它们的思想：<br />
1、门面模式(<span lang="EN-US">Facade</span>)也称外观模式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为子系统提供统一的接口，这个接口就叫门在了，客户只需与门面来的交道，内部调用那个功能模块对客户类来说是隐藏的。现实生活中去医院看病捡药的例子是一样的。<br />
2、代理模式(<span lang="EN-US">Proxy</span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp; 有两种方式一种是静态代理，另一种是动态代理。代理模式就是为其它对象提供代理以控制对这个对象的访问。<br />
3、适配器模式（<span lang="EN-US">Adapter）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 将两个不兼容的类纠合在一起使用,使用这个模式时，最好以面向接口的方式实一，而不用继承。这是一个比较好理解的模块，不需要看例程就应该能回忆起它的结构。<br />
4、组合模式（<span lang="EN-US">Composite</span>）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 将对象以树的形式组合起来，以达成整体与部份的结构。并在类中提供添加，删除，遍历这三个方法。通常以操象类为父类来实现。<br />
5、油漆工模式（<span lang="EN-US">Decorator）<br />
说白了就是给一个类再添加些功能，通常可以在设计中可以使用继承，再实现个接口。该模式可以避免这样做，实一方法是在实现接口的类方法中，添中一些额外功能函数。<br />
6、桥接模式（<span lang="EN-US">Bridge）<o:p></o:p></span><br />
&nbsp;&nbsp;&nbsp; 将操象与行为分离。<br />
7、享元模式(<span lang="EN-US">Flyweight)<br />
&nbsp;&nbsp;&nbsp; 说白了就是一个Map 用来存储对象时，先判断Map中是否有该对象，如果有就不需再存进。或者要从别的地方联一个对象时，先在Map里找，如果找到就不用去别的地方了。有点类似于一个池。具体实现就不说了<br />
<br />
</span></span></span>
<img src ="http://www.blogjava.net/pdw2009/aggbug/147410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-09-22 14:58 <a href="http://www.blogjava.net/pdw2009/archive/2007/09/22/147410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之创建模式</title><link>http://www.blogjava.net/pdw2009/archive/2007/09/19/146633.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 19 Sep 2007 15:26:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/09/19/146633.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/146633.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/09/19/146633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/146633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/146633.html</trackback:ping><description><![CDATA[设计模式分三大类：创建、结构、行为!<br />
设计模式是对软件建立的一个方法，也可以说是一种行为规范！在面向对象的软件开发思想里，最为关键的我想是OOA/OOD，这是面向对象程序设计的基础，而设计模式分的这三大类，是OOD中所必须的元素。设计模式分类与对象三大特征吻合。<br />
1、对象创建：任何一个对象都有一个建立过程，就是从类生成对象。<br />
2、对象结构：更准确来讲是类的结构，我们要创建一个类（对象）就必须先确定它的结构。<br />
3、对象行为：对象（类）由构造函数、属性、方法构成，而方法通常就是指对象的行为。<br />
<br />
设计模式分类可以说是以类到对象创建过程来划分的。<br />
<br />
设计模式有些书是长篇大论，让我不知所措，俺文化水平低只能从个人的见解上做简单的分析，并反简单的思想用到实际开发中。<br />
创建模式有4个子模式：<br />
这4个模式都是创建对象的，只不是创建的方式不一样，有的对象只能创建一个；有的对象是通过工厂来生产；有的对象由很多小对象组成（有整体与部份关系）就通过Builder(构造),下面做介绍<br />
<br />
1、<span lang="EN-US">Factory<o:p></o:p></span>&nbsp;（工厂模式）:分为工厂方法，操象工厂 。单一个接口有多个实现时通常可以用工厂方法来实现，如果要创建多个接口的实现类，并现对构建比较复杂时我们就用操象工厂。<br />
2、<span lang="EN-US">Prototype（原型模式）</span>：基本不用，实际上是父类实现了一个Cloneable接口。我不喜欢用这种方式，也找到更好的方法来实现Cloneable。<br />
3、<span lang="EN-US">Builder（构造模式）：是为了将构建复杂对象的<strong><em>过程</em></strong>和它的<strong><em>部件</em></strong>解耦.注意: 是解耦<strong><em>过程</em></strong>和<strong><em>部件</em></strong></span> ,通常先定义构造类的接口，实现不同的部件构造，然后有一个装配的过程。<br />
<span lang="EN-US">4、Singleton（单态模式）：太常用，不用介绍，通常有三种创建单态类的方法。<br />
</span><br />
学习设计模式不是要牢记它是怎么实现的，不要记住列子，只要记住思想就可以了，当你在现实中做设计的时候，让这些思想浮现在你脑海里，选择最适用你的实现方法。<br />
<img src ="http://www.blogjava.net/pdw2009/aggbug/146633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-09-19 23:26 <a href="http://www.blogjava.net/pdw2009/archive/2007/09/19/146633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式--command(命令模式)</title><link>http://www.blogjava.net/pdw2009/archive/2006/07/13/58070.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 13 Jul 2006 15:00:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/07/13/58070.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/58070.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/07/13/58070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/58070.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/58070.html</trackback:ping><description><![CDATA[
		<p>Command有很多种实现方式，可以随便的按便这个规律来自由发挥。<br />package com.pdw.pattern;</p>
		<p>import java.util.*;<br />import org.apache.commons.lang.StringUtils;</p>
		<p>interface Command{<br /> public void execute();<br />}<br />interface Parameter{<br /> public  String getCommandType();<br />}<br />class Engineer implements Command{</p>
		<p> public void execute() {<br />  // TODO Auto-generated method stub<br />  System.out.println("Enginer....");<br /> }<br /> <br />}</p>
		<p>
				<br />class Programer implements Command{</p>
		<p> public void execute() {<br />  // TODO Auto-generated method stub<br />  System.out.println("Programer....");<br /> }<br /> <br />}<br />class Doctor implements Command{</p>
		<p> public void execute() {<br />  // TODO Auto-generated method stub<br />  System.out.println("Doctor.............");<br /> }<br /> <br />}<br />class EngineerParameter implements Parameter{</p>
		<p> public String getCommandType() {<br />  // TODO Auto-generated method stub<br />  return "Engineer";<br /> }<br /> <br />}<br />class CommandProduce{<br /> public static List commandList=new ArrayList();<br /> public CommandProduce(){<br />  commandList.add(new Engineer());<br />  commandList.add(new Programer());<br />  commandList.add(new Doctor());<br /> }<br /> public static Command getCommand(Parameter p){<br />  Iterator it=commandList.iterator();<br />  while(it.hasNext()){<br />   Object c=(Object)it.next();<br />   System.out.println(c.getClass().getName());<br />   if(StringUtils.indexOf(c.getClass().getName(),p.getCommandType())&gt;0){<br />    return (Command)c;<br />   }<br />  }<br />  return null;<br /> }<br />}<br />public class CommandImpl {</p>
		<p> public static void main(String[] args) {<br />  // TODO Auto-generated method stub</p>
		<p>  EngineerParameter ep=new EngineerParameter();<br />  CommandProduce cp=new CommandProduce();<br />  (CommandProduce.getCommand(ep)).execute();<br /> }</p>
		<p>}<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/58070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-07-13 23:00 <a href="http://www.blogjava.net/pdw2009/archive/2006/07/13/58070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式---Observer(观察)</title><link>http://www.blogjava.net/pdw2009/archive/2006/07/10/57573.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Mon, 10 Jul 2006 15:05:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/07/10/57573.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/57573.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/07/10/57573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/57573.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/57573.html</trackback:ping><description><![CDATA[
		<p>Observer 的定义：<br />     当被观察的对象特定属性改变时，就通知被它的观察对象。<br />在这个模式中就两个角色一个是被观察者，一个是观察者。当被观察者做了某些改变时就通知它的观察者。一个被观察对象可以有N个观察者。java.util.*包中已经实现了这种模式。请参考如下例子：<br />package com.pdw.pattern;</p>
		<p>import java.util.*;</p>
		<p>class Product extends Observable{//被观察者必继承于Observable<br /> <br /> private String pname;<br /> private float price;<br /> <br /> public String getPname() {<br />  return pname;<br /> }<br /> public void setPname(String pname) {<br />  this.pname = pname;<br />  setChanged();<br />  notifyObservers(pname);<br /> }<br /> public float getPrice() {<br />  return price;<br /> }<br /> public void setPrice(float price) {<br />  this.price = price;<br />  setChanged();<br />  notifyObservers(new Float(price));<br /> }<br />}<br />class NameObserver implements Observer{ //观察者必须实现Observer接口</p>
		<p> public void update(Observable arg0, Object arg1) {<br />  if(arg1 instanceof String){<br />   System.out.println("产品名---&gt;"+arg1);<br />  }<br /> }<br /> <br />}<br />class PriceObserver implements Observer{</p>
		<p> public void update(Observable arg0, Object arg1) {<br />  if(arg1 instanceof Float){<br />   System.out.println("产品价格是-&gt;"+arg1);<br />  }<br /> }<br /> <br />}<br />public class ObserverImpl {</p>
		<p> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  // TODO Auto-generated method stub<br />  Product p=new Product();<br />  p.setPname("电脑");<br />  p.setPrice(Float.valueOf("5632.6"));<br />  NameObserver no=new NameObserver();<br />  PriceObserver po=new PriceObserver();<br />  p.addObserver(no);<br />  p.addObserver(po);<br />  p.setPname("笔记本电脑");<br />  p.setPrice(Float.valueOf("9635.5"));<br /> }</p>
		<p>}<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/57573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-07-10 23:05 <a href="http://www.blogjava.net/pdw2009/archive/2006/07/10/57573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式---Memento(备忘录)</title><link>http://www.blogjava.net/pdw2009/archive/2006/07/10/57572.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Mon, 10 Jul 2006 14:58:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/07/10/57572.html</guid><description><![CDATA[
		<p>Memento的定义：<br />       Memento是一个保存另外一个对象的内部状态拷贝的对象，这样就可以把对象恢复到原先状态。<br /><br />确的没必要用这个东西，耗内存，麻烦。我想备份对象为什么不用对象的深度拷贝呢。这样不是很省事吗？谁能告诉我一个理由呢？<br /><br />下面是一个Memento模式例子，很简单：<br />package com.pdw.pattern;</p>
		<p>import java.io.*;<br />import java.util.*;</p>
		<p>class Originator{<br /> private int number;<br /> private File file;<br /> <br /> <br /> <br /> <br /> public File getFile() {<br />  return file;<br /> }</p>
		<p> public void setFile(File file) {<br />  this.file = file;<br /> }</p>
		<p> public int getNumber() {<br />  return number;<br /> }</p>
		<p> public void setNumber(int number) {<br />  this.number = number;<br /> }</p>
		<p> public Originator(){}<br /> //创建备份<br /> public Memento getMemento(){<br />  return new Memento(this);<br /> }<br /> //恢复到原始值<br /> public void setMemento(Memento m){<br />  this.file=m.getFile();<br />  this.number=m.getNumber();<br /> }<br />}<br />class Memento implements Serializable{<br /> private  int number;<br /> private  File file;</p>
		<p> public File getFile() {<br />  return file;<br /> }</p>
		<p> public void setFile(File file) {<br />  this.file = file;<br /> }</p>
		<p> public int getNumber() {<br />  return number;<br /> }</p>
		<p> public void setNumber(int number) {<br />  this.number = number;<br /> }</p>
		<p> public Memento(Originator o){<br />  this.number=o.getNumber();<br />  this.file=o.getFile();<br /> }<br /> <br />}<br />public class MemebtoImpl {</p>
		<p> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  // TODO Auto-generated method stub<br />  Originator o=new Originator();<br />  o.setNumber(100);<br />  Memento m=o.getMemento();//建备一个备份对象<br />  o.setNumber(50); //改变对象属性<br />  o.setMemento(m); //还原<br />  System.out.println(o.getNumber());<br /> }</p>
		<p>}<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/57572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-07-10 22:58 <a href="http://www.blogjava.net/pdw2009/archive/2006/07/10/57572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式---Template(模板)</title><link>http://www.blogjava.net/pdw2009/archive/2006/07/09/57385.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Sun, 09 Jul 2006 14:58:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/07/09/57385.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/57385.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/07/09/57385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/57385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/57385.html</trackback:ping><description><![CDATA[
		<p>定义：<br />         定义一个算法中的骨架，将一些步骤的执行延期到子类，其实JAVA中的操象类就是一个Template模式，因些使用得很普遍，很容易理解。如：<br />package com.pdw.pattern;</p>
		<p>abstract class Benchmark{<br /> public abstract void benchmark();<br /> <br /> /**<br />  * 重复执行的次数<br />  * @param count<br />  * @return<br />  */<br /> public final long repeat(int count){<br />  long startTime;<br />  if(count&lt;0){<br />   return 0;<br />  }else{<br />   startTime=System.currentTimeMillis();<br />   for(int i=0;i&lt;count;i++){<br />    benchmark();<br />   }<br />  }<br />  long stopTime=System.currentTimeMillis();<br />  return stopTime-startTime;<br />  <br /> }<br />}<br />class MethodBenchmark extends Benchmark{</p>
		<p> public void benchmark() {<br />  for(int i=0;i&lt;200000;i++){<br />   System.out.println("i="+i);<br />  }<br /> }<br /> <br />}</p>
		<p>public class TemplateImpl {<br /> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  Benchmark operation=new MethodBenchmark();<br />  long d=operation.repeat(1);<br />  System.out.println("执行一次所需要用的时间："+d);<br /> }</p>
		<p>}<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/57385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-07-09 22:58 <a href="http://www.blogjava.net/pdw2009/archive/2006/07/09/57385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式----Flyweight(享元)</title><link>http://www.blogjava.net/pdw2009/archive/2006/07/09/57383.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Sun, 09 Jul 2006 14:50:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/07/09/57383.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/57383.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/07/09/57383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/57383.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/57383.html</trackback:ping><description><![CDATA[
		<p>Flyweight的定义：<br />   避免大量拥有相同内容的小类开销（如消耗内存），使大家共享一个类叫元类。<br />为什么使用：<br />     面向对角的原则是一切都是对象，但如果对象数非常庞大，如果字处理软件，对数据表的DAO操作。等耗内存的操作，我们就要求同存异，找出共同体，设计为一个元类。另外一些特性取决于context是不可共享的。<br /><br />使用例子如：<br />package com.pdw.pattern;</p>
		<p>import java.util.*;</p>
		<p>class CD{<br /> private String title;<br /> private int year;<br /> private Artist artist;<br /> <br /> <br /> public Artist getArtist() {<br />  return artist;<br /> }<br /> public void setArtist(Artist artist) {<br />  this.artist = artist;<br /> }<br /> public String getTitle() {<br />  return title;<br /> }<br /> public void setTitle(String title) {<br />  this.title = title;<br /> }<br /> public int getYear() {<br />  return year;<br /> }<br /> public void setYear(int year) {<br />  this.year = year;<br /> }<br /> <br /> <br />}<br />class Artist{<br /> private String name;<br /> public String getName(){<br />  return this.name;<br /> }<br /> public Artist(String n){<br />  this.name=n;<br /> }<br /> <br />}<br />class ArtistFactory{<br /> <br /> Hashtable flyweights=new Hashtable();<br /> Artist getArtist(String key){<br />  Artist result;<br />  result=(Artist)flyweights.get(key);<br />  if(result==null){<br />   result=new Artist(key);<br />   flyweights.put(key,result);<br />  }<br />  return result;<br /> }</p>
		<p>}</p>
		<p>public class FlyweightImpl {</p>
		<p> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  CD cd=new CD();<br />  ArtistFactory af=new ArtistFactory();<br />  cd.setArtist(new Artist("李"));<br />  cd.setTitle("测试");<br />  cd.setYear(1998);<br />  Artist va=af.getArtist("裴");<br />  System.out.println(va.getName());<br />  af.getArtist("李");<br />  <br />  System.out.println(af.flyweights.size());<br /> }</p>
		<p>}<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/57383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-07-09 22:50 <a href="http://www.blogjava.net/pdw2009/archive/2006/07/09/57383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式---Adapter(适配器)</title><link>http://www.blogjava.net/pdw2009/archive/2006/07/03/56428.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Mon, 03 Jul 2006 15:03:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/07/03/56428.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/56428.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/07/03/56428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/56428.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/56428.html</trackback:ping><description><![CDATA[
		<p>1 定义：<br />     将两个不兼容的类纠合在一起使用，属于结构型模式，需要有被适配者（Adaptee）和适配器(Adapor)两个身份。<br />2 为何使用：<br />    我们经常需要将两上没有关系的类组合在一起使用，第一解决方案是修改各自类的接口，便如没有源代码，或者我们不愿意为一个应用而修改接口怎么办，就用Adapter创建混血的组合体。<br />至于怎么用可以参考 《think in java》的“类再生”这一节所提到的两个方式：组合(Composition)和继承(inheritance)<br /><br />参考例子：<br />package com.pdw.pattern;<br />/**<br /> * 两个不兼容的类纠合在一起使用，属于结构模型，需有被适配器（Adaptee)和适配器(Adaptor)两个身份<br /> * <br /> * @author Administrator<br /> *<br /> */</p>
		<p>//打方型<br />class SquarePeg{<br /> public void insert(String str){<br />  System.out.println("打方型--&gt;"+str);<br /> }<br />}<br />//打圆柱型<br />class RoundPeg{<br /> public void insertIntohole(String msg){<br />  System.out.println("打圆柱型--&gt;"+msg);<br /> }<br />}</p>
		<p>class PegAdapter extends SquarePeg{<br /> private RoundPeg rp;<br /> public PegAdapter(RoundPeg vrp){<br />  this.rp=vrp;<br /> }<br /> public void insertRound(String str){<br />  rp.insertIntohole(str);<br /> }<br /> public void insertSquare(String str){<br />  super.insert(str);<br /> }<br />}<br />public class AdapterImpl {</p>
		<p> <br /> <br /> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  RoundPeg rp=new RoundPeg();<br />  PegAdapter pg=new PegAdapter(rp);<br />  pg.insertRound("圆柱型");<br />  pg.insertSquare("方型");<br /> }</p>
		<p>}<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/56428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-07-03 23:03 <a href="http://www.blogjava.net/pdw2009/archive/2006/07/03/56428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之----Facade(外观)</title><link>http://www.blogjava.net/pdw2009/archive/2006/07/02/56214.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Sun, 02 Jul 2006 15:21:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/07/02/56214.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/56214.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/07/02/56214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/56214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/56214.html</trackback:ping><description><![CDATA[实现上就是把各种复的实现的类，操象出一个统一的接口。没找到好的例子！！！<img src ="http://www.blogjava.net/pdw2009/aggbug/56214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-07-02 23:21 <a href="http://www.blogjava.net/pdw2009/archive/2006/07/02/56214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式---Singleton</title><link>http://www.blogjava.net/pdw2009/archive/2006/06/29/55830.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 29 Jun 2006 15:01:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/06/29/55830.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/55830.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/06/29/55830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/55830.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/55830.html</trackback:ping><description><![CDATA[
		<p>单态的作用就不用说了，经常用过，就是一个类只产生一个对象。<br />它有两个种实现方法。实现在大同小异，可以根据需要改进。<br />例程如下：<br />package com.pdw.pattern;</p>
		<p>class SingletonA{<br /> private SingletonA(){<br />  <br /> }<br /> private static SingletonA _instance=new SingletonA();<br /> public static SingletonA getInstance(){<br />  return _instance;<br /> }<br />}<br />class SingletonB{<br /> private static SingletonB _instance;<br /> public static SingletonB getInstance(){<br />  if(_instance==null){<br />   return new SingletonB();<br />  }else{<br />   return _instance;<br />  }<br />  <br /> }<br />}<br />public class SingletonImpl {</p>
		<p> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  // TODO Auto-generated method stub</p>
		<p> }</p>
		<p>}<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/55830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-06-29 23:01 <a href="http://www.blogjava.net/pdw2009/archive/2006/06/29/55830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式----builder</title><link>http://www.blogjava.net/pdw2009/archive/2006/06/29/55829.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Thu, 29 Jun 2006 14:52:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/06/29/55829.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/55829.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/06/29/55829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/55829.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/55829.html</trackback:ping><description><![CDATA[
		<p>构建模式的定义：<br />将一个复杂的对象构建与它的表示分离开来，使用样的构建过程可以创建不同的表示。<br />Builder 模式是一步一步创建一个复杂的对象，它充许用户通过指定复杂对象类型和内容就可以构建它们。用户不需知道其内部细节。Builder非常类似操象工厂模式，只有在使用中才能区别开来。一个使用例子：<br />package com.pdw.pattern;<br /> <br />/*<br /> * 小对象的创建接口<br /> */<br />interface PartA{<br /> public void builderA();<br /> public void outPartAInfo();<br />}<br />interface PartB{<br /> public void builderB();<br />}<br />/*<br /> * 大对象创建接口<br /> */<br />interface Builder{<br /> void buildPartA(); <br /> void buildPartB();<br /> Produce getResult();<br />}</p>
		<p>/*<br /> * 产品接口<br /> */<br />interface Produce{<br /> public void OutProduceInfo();<br />}</p>
		<p>/*<br /> * 构建部件<br /> */<br />class Director{<br /> private Builder builder;<br /> <br /> public Director(Builder vbuilder){<br />  this.builder=vbuilder;<br /> }<br /> <br /> public void construct(){<br />  builder.buildPartA();<br />  builder.buildPartB();<br /> }<br /> <br />}<br />/*<br /> * 部件实现类<br /> */<br />class PartAImpl implements PartA{</p>
		<p> public void builderA() {<br />  // TODO Auto-generated method stub<br />  System.out.print("PartA组装完成...");<br /> }</p>
		<p> public void outPartAInfo() {<br />  // TODO Auto-generated method stub<br />  System.out.println("PartA 信息。。。 ");<br /> }<br /> <br />}<br />class PartBImpl implements PartB{</p>
		<p> public void builderB() {<br />  // TODO Auto-generated method stub<br />  System.out.println("构造部件B完成....");<br /> }<br /> <br />}<br />class ProduceImpl implements Produce{</p>
		<p> private PartA pa;<br /> private PartB pb;<br /> private ProduceImpl(){}</p>
		<p> public  ProduceImpl(PartA pa,PartB pb){<br />  this.pa=pa;<br />  this.pb=pb;<br /> }<br /> public void OutProduceInfo() {<br />  // TODO Auto-generated method stub<br />  pa.builderA();<br />  pb.builderB();<br />  pa.outPartAInfo();<br />  System.out.println("这里输入了产品信息，当然产品还有很多功能方法没写呵");<br /> }<br /> <br />}<br />class Cbuilder implements Builder{<br /> PartA pa;<br /> PartB pb;<br /> public void buildPartA() {<br />  pa=new PartAImpl(); //具体子部件实现代码<br />  <br /> }</p>
		<p> public void buildPartB() {<br />  <br />  pb=new PartBImpl();<br /> }</p>
		<p> public Produce getResult() {<br />  ProduceImpl pi=new ProduceImpl(pa,pb);<br />  return pi;<br /> }<br /> <br />}</p>
		<p> </p>
		<p>
				<br />public class BuilderImpl {</p>
		<p> <br /> <br /> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  // TODO Auto-generated method stub<br />  Cbuilder builder=new Cbuilder();<br />  Director d=new Director(builder);<br />  d.construct();<br />  Produce p=builder.getResult();<br />  p.OutProduceInfo();<br /> }</p>
		<p>}<br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/55829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-06-29 22:52 <a href="http://www.blogjava.net/pdw2009/archive/2006/06/29/55829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之--Prototype</title><link>http://www.blogjava.net/pdw2009/archive/2006/06/28/55635.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 28 Jun 2006 15:26:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/06/28/55635.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/55635.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/06/28/55635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/55635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/55635.html</trackback:ping><description><![CDATA[
		<p>用原型实例指定创建对象的种类，并且都过拷贝这些原型建建新的对象。<br />prototype模式充许一个对象再创建另一个可定制的对象，根本无需知道创建的细节。<br />java中提供了clone()来实现对象克隆。所以prototype模式变得了很简单。请参考以下例程：<br />package com.pdw.pattern;</p>
		<p>abstract class AbsHello implements Cloneable{<br /> <br /> String username;</p>
		<p> public String getUsername() {<br />  return username;<br /> }</p>
		<p> public void setUsername(String username) {<br />  this.username = username;<br /> }<br /> <br /> public abstract void sayHello();<br /> <br /> public Object clone(){<br />  Object object=null;<br />  try{<br />   object=super.clone();<br />   <br />  }catch(Exception e){<br />   System.err.println(e);<br />  }<br />  return object;<br /> }<br />}<br />class OneHello extends AbsHello{<br /> public OneHello(){<br />  setUsername("peidw");<br /> }<br /> @Override<br /> public void sayHello() {<br />  // TODO Auto-generated method stub<br />  System.out.println("OneHello--&gt;SayHello to "+username);<br /> }<br /> <br />}</p>
		<p>class TwoHello extends AbsHello{<br /> public TwoHello(){<br />  setUsername("pxm");<br /> }<br /> @Override<br /> public void sayHello() {<br />  // TODO Auto-generated method stub<br />  System.out.println("TwoHello--&gt;sayHello to "+username);<br /> }<br /> <br />}</p>
		<p>public class Prototype {</p>
		<p> /**<br />  * @param args<br />  */<br /> public static void main(String[] args) {<br />  // TODO Auto-generated method stub<br />  AbsHello oneh=new OneHello();<br />  AbsHello twoh=new TwoHello();<br />  oneh.sayHello();<br />  twoh.sayHello();<br /> }</p>
		<p>}<br /><br /><br /></p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/55635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-06-28 23:26 <a href="http://www.blogjava.net/pdw2009/archive/2006/06/28/55635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之Factory</title><link>http://www.blogjava.net/pdw2009/archive/2006/06/28/55633.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 28 Jun 2006 14:54:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/06/28/55633.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/55633.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/06/28/55633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/55633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/55633.html</trackback:ping><description><![CDATA[
		<p>package com.pdw.pattern;</p>
		<p>interface Me{<br /> public void sayHello();<br /> public void sayBay();<br />}</p>
		<p>
				<br />class SampleFacotry implements Me{</p>
		<p> public void sayHello() {<br />  // TODO Auto-generated method stub<br />  System.out.println("sampleFacotry-&gt;SayHello....");<br /> }</p>
		<p> public void sayBay() {<br />  // TODO Auto-generated method stub<br />  System.out.println("sampleFacotry-&gt;Bay....");<br /> }<br /> <br />}<br />class PPFacotry implements Me{</p>
		<p> public void sayHello() {<br />  // TODO Auto-generated method stub<br />  System.out.println("PPFacotry--&gt;"+"Say Hello");<br /> }</p>
		<p> public void sayBay() {<br />  // TODO Auto-generated method stub<br />  System.out.println("PPFacotry--&gt;"+"Say Bay.");<br /> }<br /> <br />}<br />  /**<br />   * 以一般工厂方法构造类<br />   * @author Administrator<br />   *<br />   */<br />class CreateFacotry{<br /> public static Me createFacotry(String aa){<br />  if(aa.equalsIgnoreCase("Sample")){<br />   return new SampleFacotry();<br />  }else if(aa.equalsIgnoreCase("")){<br />   return new PPFacotry();<br />  }else{<br />   return null;<br />  }<br /> }<br />}<br />/**<br /> * 操象工厂的实现。<br /> * @author Administrator<br /> *<br /> */<br />abstract class CFacory{<br /> public abstract SampleFacotry mecreator();<br /> public abstract PPFacotry kkmeicreator();<br />}</p>
		<p>class CFacoryImple extends CFacory{</p>
		<p> @Override<br /> public SampleFacotry mecreator() {<br />  // TODO Auto-generated method stub<br />  return new SampleFacotry();<br /> }</p>
		<p> @Override<br /> public PPFacotry kkmeicreator() {<br />  // TODO Auto-generated method stub<br />  return new PPFacotry();<br /> }<br /> <br />}</p>
		<p>public class Facotry {<br /> public static void main(String[] args){<br />  Me a=CreateFacotry.createFacotry("Sample");<br />  a.sayHello();<br />  CFacoryImple cfi=new CFacoryImple();<br />  Me me=cfi.mecreator();<br />  Me ppme=cfi.kkmeicreator();<br />  me.sayBay();<br />  ppme.sayBay();<br /> }<br />}<br /><br />以上这个例程，说明了一般工厂以及操象工厂的实现。<br />工厂这个构造模式在开发中会经常用到 </p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/55633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-06-28 22:54 <a href="http://www.blogjava.net/pdw2009/archive/2006/06/28/55633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>