??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲日夜超级视频,欧美成人ⅴideosxxxxx,超碰在线94http://www.aygfsteel.com/pdw2009/category/12603.htmlJ2EE相关应用技术日?/description>zh-cnTue, 25 Sep 2007 20:52:46 GMTTue, 25 Sep 2007 20:52:46 GMT60设计模式之行?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/pdw2009/archive/2007/09/24/147927.html</guid><wfw:comment>http://www.aygfsteel.com/pdw2009/comments/147927.html</wfw:comment><comments>http://www.aygfsteel.com/pdw2009/archive/2007/09/24/147927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/pdw2009/comments/commentRss/147927.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/pdw2009/services/trackbacks/147927.html</trackback:ping><description><![CDATA[cL没有行ؓ的,只有对象才可能有行ؓQ但对象的行定是q来定义的?br /> 今天讲要10个行计模式,C它们的思想Q?br /> 1?span lang="EN-US">Template<o:p></o:p></span>Q模版)<br />       定义一个操作中法的骨?一些步骤的执行延迟到其子类?<o:p></o:p> 如Struts中的execute()ҎQ通俗的说法是在父cȝҎ中,调用操象的方法。而操象的Ҏ是由实现cL实现?br /> <br /> 2?span lang="EN-US">Memento</span>Q备忘录模式Q?br />       备忘录模录实际上是对象内部状态的拯Q运行到某个时候可以恢复它原有的状态,在实际开发中我们l常会用到该模式Q但写法可能不一栗?br /> 3?span lang="EN-US"><span lang="EN-US">Observer<o:p></o:p></span>Q听模式)<br />      别h说是观察者,我喜Ƣ说q是监听模式Q就是设|一个对象的监听对象Q当被监听对象的状态改变时触发一个事ӞJDK已经提供实现了。需要用到时GOOGLE一样就OK?br /> 4?span lang="EN-US">Chain of Responsibility</span>Q职责链Q?br />     是一个对象当作一个参C递给不同的对q行职责处理?br /> 5?span lang="EN-US">Command<o:p></o:p></span>Q命令模式)<br />     q具体装了,实际开发中用一得也挺多?br /> 6?span lang="EN-US">State<o:p></o:p></span>Q状态模式)<br />     <br /> 7?span lang="EN-US">Strategy({略)<o:p></o:p></span><br />     是对法的一U封?br /> 8?span lang="EN-US">Mediator(中介?<o:p></o:p></span><br />    各个对象之间的交互操作非常多;每个对象的行为操作都依赖彼此Ҏ,修改一个对象的行ؓ,同时会涉及到修改很多其他对象的行?如果使用Mediator模式,可以使各个对象间的耦合松散,只需兛_?Mediator的关p?使多对多的关pd成了一对多的关p?可以降低pȝ的复杂?提高可修Ҏ展?<o:p></o:p> <p>9?span lang="EN-US">Interpreter(解释?<o:p></o:p></span><br /> 10?strong><span lang="EN-US">VisitorQ参观者模式)<br /> 是遍历c集中的对象?/span></strong></p> <br /> </span> <img src ="http://www.aygfsteel.com/pdw2009/aggbug/147927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/pdw2009/" target="_blank">有猫怼的日?/a> 2007-09-24 23:36 <a href="http://www.aygfsteel.com/pdw2009/archive/2007/09/24/147927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之结?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/pdw2009/archive/2007/09/22/147410.html</guid><wfw:comment>http://www.aygfsteel.com/pdw2009/comments/147410.html</wfw:comment><comments>http://www.aygfsteel.com/pdw2009/archive/2007/09/22/147410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/pdw2009/comments/commentRss/147410.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/pdw2009/services/trackbacks/147410.html</trackback:ping><description><![CDATA[l构模式?个小模式Q下面分别说一下它们的思想Q?br /> 1、门面模?<span lang="EN-US">Facade</span>)也称外观模式<br />       为子pȝ提供l一的接口,q个接口叫门在了,客户只需与门面来的交道,内部调用那个功能模块对客L来说是隐藏的。现实生zMd院看病捡药的例子是一L?br /> 2、代理模?<span lang="EN-US">Proxy</span>)<br />      有两U方式一U是静态代理,另一U是动态代理。代理模式就是ؓ其它对象提供代理以控制对q个对象的访问?br /> 3、适配器模式(<span lang="EN-US">AdapterQ?br />      两个不兼容的类U合在一起?使用q个模式Ӟ最好以面向接口的方式实一Q而不用ѝ这是一个比较好理解的模块,不需要看例程应该能回忆起它的结构?br /> 4、组合模式(<span lang="EN-US">Composite</span>Q?br />      对象以树的形式l合hQ以达成整体与部份的l构。ƈ在类中提供添加,删除Q遍历这三个Ҏ。通常以操象类为父cL实现?br /> 5、a漆工模式Q?span lang="EN-US">DecoratorQ?br /> 说白了就是给一个类再添加些功能Q通常可以在设计中可以使用l承Q再实现个接口。该模式可以避免q样做,实一Ҏ是在实现接口的类Ҏ中,M一些额外功能函数?br /> 6、桥接模式(<span lang="EN-US">BridgeQ?o:p></o:p></span><br />     操象与行ؓ分离?br /> 7、n元模?<span lang="EN-US">Flyweight)<br />     说白了就是一个Map 用来存储对象Ӟ先判断Map中是否有该对象,如果有就不需再存q。或者要从别的地方联一个对象时Q先在Map里找Q如果找到就不用d的地方了。有点类g一个池。具体实现就不说?br /> <br /> </span></span></span> <img src ="http://www.aygfsteel.com/pdw2009/aggbug/147410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/pdw2009/" target="_blank">有猫怼的日?/a> 2007-09-22 14:58 <a href="http://www.aygfsteel.com/pdw2009/archive/2007/09/22/147410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之创建模?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/pdw2009/archive/2007/09/19/146633.html</guid><wfw:comment>http://www.aygfsteel.com/pdw2009/comments/146633.html</wfw:comment><comments>http://www.aygfsteel.com/pdw2009/archive/2007/09/19/146633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/pdw2009/comments/commentRss/146633.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/pdw2009/services/trackbacks/146633.html</trackback:ping><description><![CDATA[设计模式分三大类Q创建、结构、行?<br /> 设计模式是对软g建立的一个方法,也可以说是一U行范!在面向对象的软g开发思想里,最为关键的我想是OOA/OODQ这是面向对象程序设计的基础Q而设计模式分的这三大c,是OOD中所必须的元素。设计模式分cM对象三大特征d?br /> 1、对象创建:M一个对象都有一个徏立过E,是从类生成对象?br /> 2、对象结构:更准来讲是cȝl构Q我们要创徏一个类Q对象)必d定它的l构?br /> 3、对象行为:对象Q类Q由构造函数、属性、方法构成,而方法通常是指对象的行ؓ?br /> <br /> 设计模式分类可以说是以类到对象创E来划分的?br /> <br /> 设计模式有些书是长篇大论Q让我不知所措,俺文化水q低只能从个人的见解上做单的分析Qƈ反简单的思想用到实际开发中?br /> 创徏模式?个子模式Q?br /> q?个模式都是创建对象的Q只不是创徏的方式不一P有的对象只能创徏一个;有的对象是通过工厂来生产;有的对象由很多小对象l成Q有整体与部份关p)通过Builder(构?,下面做介l?br /> <br /> 1?span lang="EN-US">Factory<o:p></o:p></span> Q工厂模式):分ؓ工厂ҎQ操象工?。单一个接口有多个实现旉常可以用工厂方法来实现Q如果要创徏多个接口的实现类Qƈ现对构徏比较复杂时我们就用操象工厂?br /> 2?span lang="EN-US">PrototypeQ原型模式)</span>Q基本不用,实际上是父类实现了一个Cloneable接口。我不喜Ƣ用q种方式Q也扑ֈ更好的方法来实现Cloneable?br /> 3?span lang="EN-US">BuilderQ构造模式)Q是Z构建复杂对象的<strong><em>q程</em></strong>和它?strong><em>部g</em></strong>解?注意: 是解?strong><em>q程</em></strong>?strong><em>部g</em></strong></span> ,通常先定义构造类的接口,实现不同的部件构造,然后有一个装配的q程?br /> <span lang="EN-US">4、SingletonQ单态模式)Q太常用Q不用介l,通常有三U创建单态类的方法?br /> </span><br /> 学习设计模式不是要牢记它是怎么实现的,不要C列子Q只要记住思想可以了Q当你在现实中做设计的时候,让这些思想现在你脑v里,选择最适用你的实现Ҏ?br /> <img src ="http://www.aygfsteel.com/pdw2009/aggbug/146633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/pdw2009/" target="_blank">有猫怼的日?/a> 2007-09-19 23:26 <a href="http://www.aygfsteel.com/pdw2009/archive/2007/09/19/146633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式--command(命o模式)http://www.aygfsteel.com/pdw2009/archive/2006/07/13/58070.html有猫怼的日?/dc:creator>有猫怼的日?/author>Thu, 13 Jul 2006 15:00:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/07/13/58070.htmlhttp://www.aygfsteel.com/pdw2009/comments/58070.htmlhttp://www.aygfsteel.com/pdw2009/archive/2006/07/13/58070.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/58070.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/58070.htmlCommand有很多种实现方式Q可以随便的按便q个规律来自由发挥?br />package com.pdw.pattern;

import java.util.*;
import org.apache.commons.lang.StringUtils;

interface Command{
 public void execute();
}
interface Parameter{
 public  String getCommandType();
}
class Engineer implements Command{

 public void execute() {
  // TODO Auto-generated method stub
  System.out.println("Enginer....");
 }
 
}


class Programer implements Command{

 public void execute() {
  // TODO Auto-generated method stub
  System.out.println("Programer....");
 }
 
}
class Doctor implements Command{

 public void execute() {
  // TODO Auto-generated method stub
  System.out.println("Doctor.............");
 }
 
}
class EngineerParameter implements Parameter{

 public String getCommandType() {
  // TODO Auto-generated method stub
  return "Engineer";
 }
 
}
class CommandProduce{
 public static List commandList=new ArrayList();
 public CommandProduce(){
  commandList.add(new Engineer());
  commandList.add(new Programer());
  commandList.add(new Doctor());
 }
 public static Command getCommand(Parameter p){
  Iterator it=commandList.iterator();
  while(it.hasNext()){
   Object c=(Object)it.next();
   System.out.println(c.getClass().getName());
   if(StringUtils.indexOf(c.getClass().getName(),p.getCommandType())>0){
    return (Command)c;
   }
  }
  return null;
 }
}
public class CommandImpl {

 public static void main(String[] args) {
  // TODO Auto-generated method stub

  EngineerParameter ep=new EngineerParameter();
  CommandProduce cp=new CommandProduce();
  (CommandProduce.getCommand(ep)).execute();
 }

}



]]>
设计模式---Observer(观察)http://www.aygfsteel.com/pdw2009/archive/2006/07/10/57573.html有猫怼的日?/dc:creator>有猫怼的日?/author>Mon, 10 Jul 2006 15:05:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/07/10/57573.htmlhttp://www.aygfsteel.com/pdw2009/comments/57573.htmlhttp://www.aygfsteel.com/pdw2009/archive/2006/07/10/57573.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/57573.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/57573.htmlObserver 的定义:
     当被观察的对象特定属性改变时Q就通知被它的观察对象?br />在这个模式中׃个角色一个是被观察者,一个是观察者。当被观察者做了某些改变时通知它的观察者。一个被观察对象可以有N个观察者。java.util.*包中已经实现了这U模式。请参考如下例子:
package com.pdw.pattern;

import java.util.*;

class Product extends Observable{//被观察者必l承于Observable
 
 private String pname;
 private float price;
 
 public String getPname() {
  return pname;
 }
 public void setPname(String pname) {
  this.pname = pname;
  setChanged();
  notifyObservers(pname);
 }
 public float getPrice() {
  return price;
 }
 public void setPrice(float price) {
  this.price = price;
  setChanged();
  notifyObservers(new Float(price));
 }
}
class NameObserver implements Observer{ //观察者必d现Observer接口

 public void update(Observable arg0, Object arg1) {
  if(arg1 instanceof String){
   System.out.println("产品?-->"+arg1);
  }
 }
 
}
class PriceObserver implements Observer{

 public void update(Observable arg0, Object arg1) {
  if(arg1 instanceof Float){
   System.out.println("产品h?>"+arg1);
  }
 }
 
}
public class ObserverImpl {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Product p=new Product();
  p.setPname("电脑");
  p.setPrice(Float.valueOf("5632.6"));
  NameObserver no=new NameObserver();
  PriceObserver po=new PriceObserver();
  p.addObserver(no);
  p.addObserver(po);
  p.setPname("W记本电?);
  p.setPrice(Float.valueOf("9635.5"));
 }

}



]]>
设计模式---Memento(备忘?http://www.aygfsteel.com/pdw2009/archive/2006/07/10/57572.html有猫怼的日?/dc:creator>有猫怼的日?/author>Mon, 10 Jul 2006 14:58:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/07/10/57572.htmlMemento的定义:
       Memento是一个保存另外一个对象的内部状态拷贝的对象Q这样就可以把对象恢复到原先状态?br />
的没必要用q个东西Q耗内存,ȝ。我惛_份对象ؓ什么不用对象的深度拯呢。这样不是很省事吗?谁能告诉我一个理由呢Q?br />
下面是一个Memento模式例子Q很单:
package com.pdw.pattern;

import java.io.*;
import java.util.*;

class Originator{
 private int number;
 private File file;
 
 
 
 
 public File getFile() {
  return file;
 }

 public void setFile(File file) {
  this.file = file;
 }

 public int getNumber() {
  return number;
 }

 public void setNumber(int number) {
  this.number = number;
 }

 public Originator(){}
 //创徏备䆾
 public Memento getMemento(){
  return new Memento(this);
 }
 //恢复到原始?br /> public void setMemento(Memento m){
  this.file=m.getFile();
  this.number=m.getNumber();
 }
}
class Memento implements Serializable{
 private  int number;
 private  File file;

 public File getFile() {
  return file;
 }

 public void setFile(File file) {
  this.file = file;
 }

 public int getNumber() {
  return number;
 }

 public void setNumber(int number) {
  this.number = number;
 }

 public Memento(Originator o){
  this.number=o.getNumber();
  this.file=o.getFile();
 }
 
}
public class MemebtoImpl {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Originator o=new Originator();
  o.setNumber(100);
  Memento m=o.getMemento();//建备一个备份对?br />  o.setNumber(50); //改变对象属?br />  o.setMemento(m); //q原
  System.out.println(o.getNumber());
 }

}



]]>
设计模式---Template(模板)http://www.aygfsteel.com/pdw2009/archive/2006/07/09/57385.html有猫怼的日?/dc:creator>有猫怼的日?/author>Sun, 09 Jul 2006 14:58:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/07/09/57385.htmlhttp://www.aygfsteel.com/pdw2009/comments/57385.htmlhttp://www.aygfsteel.com/pdw2009/archive/2006/07/09/57385.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/57385.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/57385.html定义Q?br />         定义一个算法中的骨Ӟ一些步骤的执行延期到子c,其实JAVA中的操象cd是一个Template模式Q因些用得很普遍,很容易理解。如Q?br />package com.pdw.pattern;

abstract class Benchmark{
 public abstract void benchmark();
 
 /**
  * 重复执行的次?br />  * @param count
  * @return
  */
 public final long repeat(int count){
  long startTime;
  if(count<0){
   return 0;
  }else{
   startTime=System.currentTimeMillis();
   for(int i=0;i<count;i++){
    benchmark();
   }
  }
  long stopTime=System.currentTimeMillis();
  return stopTime-startTime;
  
 }
}
class MethodBenchmark extends Benchmark{

 public void benchmark() {
  for(int i=0;i<200000;i++){
   System.out.println("i="+i);
  }
 }
 
}

public class TemplateImpl {
 /**
  * @param args
  */
 public static void main(String[] args) {
  Benchmark operation=new MethodBenchmark();
  long d=operation.repeat(1);
  System.out.println("执行一ơ所需要用的时_"+d);
 }

}



]]>
设计模式----Flyweight(享元)http://www.aygfsteel.com/pdw2009/archive/2006/07/09/57383.html有猫怼的日?/dc:creator>有猫怼的日?/author>Sun, 09 Jul 2006 14:50:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/07/09/57383.htmlhttp://www.aygfsteel.com/pdw2009/comments/57383.htmlhttp://www.aygfsteel.com/pdw2009/archive/2006/07/09/57383.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/57383.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/57383.htmlFlyweight的定义:
   避免大量拥有相同内容的小cd销Q如消耗内存)Q大家׃n一个类叫元cR?br />Z么用:
     面向对角的原则是一切都是对象,但如果对象数非常庞大Q如果字处理软gQ对数据表的DAO操作。等耗内存的操作Q我们就要求同存异,扑և共同体,设计Z个元cR另外一些特性取决于context是不可共享的?br />
使用例子如:
package com.pdw.pattern;

import java.util.*;

class CD{
 private String title;
 private int year;
 private Artist artist;
 
 
 public Artist getArtist() {
  return artist;
 }
 public void setArtist(Artist artist) {
  this.artist = artist;
 }
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 public int getYear() {
  return year;
 }
 public void setYear(int year) {
  this.year = year;
 }
 
 
}
class Artist{
 private String name;
 public String getName(){
  return this.name;
 }
 public Artist(String n){
  this.name=n;
 }
 
}
class ArtistFactory{
 
 Hashtable flyweights=new Hashtable();
 Artist getArtist(String key){
  Artist result;
  result=(Artist)flyweights.get(key);
  if(result==null){
   result=new Artist(key);
   flyweights.put(key,result);
  }
  return result;
 }

}

public class FlyweightImpl {

 /**
  * @param args
  */
 public static void main(String[] args) {
  CD cd=new CD();
  ArtistFactory af=new ArtistFactory();
  cd.setArtist(new Artist("?));
  cd.setTitle("试");
  cd.setYear(1998);
  Artist va=af.getArtist("?);
  System.out.println(va.getName());
  af.getArtist("?);
  
  System.out.println(af.flyweights.size());
 }

}



]]>
设计模式---Adapter(适配?http://www.aygfsteel.com/pdw2009/archive/2006/07/03/56428.html有猫怼的日?/dc:creator>有猫怼的日?/author>Mon, 03 Jul 2006 15:03:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/07/03/56428.htmlhttp://www.aygfsteel.com/pdw2009/comments/56428.htmlhttp://www.aygfsteel.com/pdw2009/archive/2006/07/03/56428.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/56428.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/56428.html1 定义Q?br />     两个不兼容的类U合在一起用,属于l构型模式,需要有被适配者(AdapteeQ和适配?Adapor)两个w䆾?br />2 Z使用Q?br />    我们l常需要将两上没有关系的类l合在一起用,W一解决Ҏ是修改各自类的接口,便如没有源代码,或者我们不愿意Z个应用而修Ҏ口怎么办,qAdapter创徏淯的组合体?br />至于怎么用可以参考 《think in java》的“类再生”这一节所提到的两个方式:l合(Composition)和?inheritance)

参考例子:
package com.pdw.pattern;
/**
 * 两个不兼容的cȝ合在一起用,属于l构模型Q需有被适配器(Adaptee)和适配?Adaptor)两个w䆾
 *
 * @author Administrator
 *
 */

//打方?br />class SquarePeg{
 public void insert(String str){
  System.out.println("打方?->"+str);
 }
}
//打圆柱型
class RoundPeg{
 public void insertIntohole(String msg){
  System.out.println("打圆柱型-->"+msg);
 }
}

class PegAdapter extends SquarePeg{
 private RoundPeg rp;
 public PegAdapter(RoundPeg vrp){
  this.rp=vrp;
 }
 public void insertRound(String str){
  rp.insertIntohole(str);
 }
 public void insertSquare(String str){
  super.insert(str);
 }
}
public class AdapterImpl {

 
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  RoundPeg rp=new RoundPeg();
  PegAdapter pg=new PegAdapter(rp);
  pg.insertRound("圆柱?);
  pg.insertSquare("方型");
 }

}



]]>
设计模式?---Facade(外观)http://www.aygfsteel.com/pdw2009/archive/2006/07/02/56214.html有猫怼的日?/dc:creator>有猫怼的日?/author>Sun, 02 Jul 2006 15:21:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/07/02/56214.htmlhttp://www.aygfsteel.com/pdw2009/comments/56214.htmlhttp://www.aygfsteel.com/pdw2009/archive/2006/07/02/56214.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/56214.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/56214.html

]]>
设计模式---Singletonhttp://www.aygfsteel.com/pdw2009/archive/2006/06/29/55830.html有猫怼的日?/dc:creator>有猫怼的日?/author>Thu, 29 Jun 2006 15:01:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/06/29/55830.htmlhttp://www.aygfsteel.com/pdw2009/comments/55830.htmlhttp://www.aygfsteel.com/pdw2009/archive/2006/06/29/55830.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/55830.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/55830.html单态的作用׃用说了,l常用过Q就是一个类只生一个对象?br />它有两个U实现方法。实现在大同异Q可以根据需要改q?br />例程如下Q?br />package com.pdw.pattern;

class SingletonA{
 private SingletonA(){
  
 }
 private static SingletonA _instance=new SingletonA();
 public static SingletonA getInstance(){
  return _instance;
 }
}
class SingletonB{
 private static SingletonB _instance;
 public static SingletonB getInstance(){
  if(_instance==null){
   return new SingletonB();
  }else{
   return _instance;
  }
  
 }
}
public class SingletonImpl {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}



]]>
设计模式----builderhttp://www.aygfsteel.com/pdw2009/archive/2006/06/29/55829.html有猫怼的日?/dc:creator>有猫怼的日?/author>Thu, 29 Jun 2006 14:52:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/06/29/55829.htmlhttp://www.aygfsteel.com/pdw2009/comments/55829.htmlhttp://www.aygfsteel.com/pdw2009/archive/2006/06/29/55829.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/55829.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/55829.html构徏模式的定义:
一个复杂的对象构徏与它的表C分d来,使用L构徏q程可以创徏不同的表C?br />Builder 模式是一步一步创Z个复杂的对象Q它充许用户通过指定复杂对象cd和内容就可以构徏它们。用户不需知道其内部细节。Builder非常cM操象工厂模式Q只有在使用中才能区别开来。一个用例子:
package com.pdw.pattern;
 
/*
 * 对象的创徏接口
 */
interface PartA{
 public void builderA();
 public void outPartAInfo();
}
interface PartB{
 public void builderB();
}
/*
 * 大对象创建接?br /> */
interface Builder{
 void buildPartA();
 void buildPartB();
 Produce getResult();
}

/*
 * 产品接口
 */
interface Produce{
 public void OutProduceInfo();
}

/*
 * 构徏部g
 */
class Director{
 private Builder builder;
 
 public Director(Builder vbuilder){
  this.builder=vbuilder;
 }
 
 public void construct(){
  builder.buildPartA();
  builder.buildPartB();
 }
 
}
/*
 * 部g实现c?br /> */
class PartAImpl implements PartA{

 public void builderA() {
  // TODO Auto-generated method stub
  System.out.print("PartAl装完成...");
 }

 public void outPartAInfo() {
  // TODO Auto-generated method stub
  System.out.println("PartA 信息。。?");
 }
 
}
class PartBImpl implements PartB{

 public void builderB() {
  // TODO Auto-generated method stub
  System.out.println("构造部件B完成....");
 }
 
}
class ProduceImpl implements Produce{

 private PartA pa;
 private PartB pb;
 private ProduceImpl(){}

 public  ProduceImpl(PartA pa,PartB pb){
  this.pa=pa;
  this.pb=pb;
 }
 public void OutProduceInfo() {
  // TODO Auto-generated method stub
  pa.builderA();
  pb.builderB();
  pa.outPartAInfo();
  System.out.println("q里输入了品信息,当然产品q有很多功能Ҏ没写?);
 }
 
}
class Cbuilder implements Builder{
 PartA pa;
 PartB pb;
 public void buildPartA() {
  pa=new PartAImpl(); //具体子部件实C?br />  
 }

 public void buildPartB() {
  
  pb=new PartBImpl();
 }

 public Produce getResult() {
  ProduceImpl pi=new ProduceImpl(pa,pb);
  return pi;
 }
 
}

 


public class BuilderImpl {

 
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Cbuilder builder=new Cbuilder();
  Director d=new Director(builder);
  d.construct();
  Produce p=builder.getResult();
  p.OutProduceInfo();
 }

}



]]>
设计模式?-Prototypehttp://www.aygfsteel.com/pdw2009/archive/2006/06/28/55635.html有猫怼的日?/dc:creator>有猫怼的日?/author>Wed, 28 Jun 2006 15:26:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/06/28/55635.htmlhttp://www.aygfsteel.com/pdw2009/comments/55635.htmlhttp://www.aygfsteel.com/pdw2009/archive/2006/06/28/55635.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/55635.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/55635.html用原型实例指定创建对象的U类Qƈ且都q拷贝这些原型徏建新的对象?br />prototype模式充许一个对象再创徏另一个可定制的对象,Ҏ无需知道创徏的细节?br />java中提供了clone()来实现对象克隆。所以prototype模式变得了很单。请参考以下例E:
package com.pdw.pattern;

abstract class AbsHello implements Cloneable{
 
 String username;

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }
 
 public abstract void sayHello();
 
 public Object clone(){
  Object object=null;
  try{
   object=super.clone();
   
  }catch(Exception e){
   System.err.println(e);
  }
  return object;
 }
}
class OneHello extends AbsHello{
 public OneHello(){
  setUsername("peidw");
 }
 @Override
 public void sayHello() {
  // TODO Auto-generated method stub
  System.out.println("OneHello-->SayHello to "+username);
 }
 
}

class TwoHello extends AbsHello{
 public TwoHello(){
  setUsername("pxm");
 }
 @Override
 public void sayHello() {
  // TODO Auto-generated method stub
  System.out.println("TwoHello-->sayHello to "+username);
 }
 
}

public class Prototype {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  AbsHello oneh=new OneHello();
  AbsHello twoh=new TwoHello();
  oneh.sayHello();
  twoh.sayHello();
 }

}




]]>
设计模式之Factoryhttp://www.aygfsteel.com/pdw2009/archive/2006/06/28/55633.html有猫怼的日?/dc:creator>有猫怼的日?/author>Wed, 28 Jun 2006 14:54:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2006/06/28/55633.htmlhttp://www.aygfsteel.com/pdw2009/comments/55633.htmlhttp://www.aygfsteel.com/pdw2009/archive/2006/06/28/55633.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/55633.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/55633.htmlpackage com.pdw.pattern;

interface Me{
 public void sayHello();
 public void sayBay();
}


class SampleFacotry implements Me{

 public void sayHello() {
  // TODO Auto-generated method stub
  System.out.println("sampleFacotry->SayHello....");
 }

 public void sayBay() {
  // TODO Auto-generated method stub
  System.out.println("sampleFacotry->Bay....");
 }
 
}
class PPFacotry implements Me{

 public void sayHello() {
  // TODO Auto-generated method stub
  System.out.println("PPFacotry-->"+"Say Hello");
 }

 public void sayBay() {
  // TODO Auto-generated method stub
  System.out.println("PPFacotry-->"+"Say Bay.");
 }
 
}
  /**
   * 以一般工厂方法构造类
   * @author Administrator
   *
   */
class CreateFacotry{
 public static Me createFacotry(String aa){
  if(aa.equalsIgnoreCase("Sample")){
   return new SampleFacotry();
  }else if(aa.equalsIgnoreCase("")){
   return new PPFacotry();
  }else{
   return null;
  }
 }
}
/**
 * 操象工厂的实现?br /> * @author Administrator
 *
 */
abstract class CFacory{
 public abstract SampleFacotry mecreator();
 public abstract PPFacotry kkmeicreator();
}

class CFacoryImple extends CFacory{

 @Override
 public SampleFacotry mecreator() {
  // TODO Auto-generated method stub
  return new SampleFacotry();
 }

 @Override
 public PPFacotry kkmeicreator() {
  // TODO Auto-generated method stub
  return new PPFacotry();
 }
 
}

public class Facotry {
 public static void main(String[] args){
  Me a=CreateFacotry.createFacotry("Sample");
  a.sayHello();
  CFacoryImple cfi=new CFacoryImple();
  Me me=cfi.mecreator();
  Me ppme=cfi.kkmeicreator();
  me.sayBay();
  ppme.sayBay();
 }
}

以上q个例程Q说明了一般工厂以及操象工厂的实现?br />工厂q个构造模式在开发中会经常用?



]]>
վ֩ģ壺 ƺ| «Ϫ| | | | ͩ| | | | Ҵ| н| | | ϰ| ľ| ½| Ϫ| ƽ| | ຣʡ| | | Ĭ| ˮ| Զ| | | | Դ| | ƽ| | | ɳ| ɳ| | ߶| Ҷ| Ͷ| | |