??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品日产aⅴ,91蜜臀精品国产自偷在线,av在线电影网站http://www.aygfsteel.com/fidodido/category/2509.html子夜 ~程 代码与我同在zh-cnTue, 27 Feb 2007 10:47:35 GMTTue, 27 Feb 2007 10:47:35 GMT60- ~省适配器模式(Default AdapterQ?/title>http://www.aygfsteel.com/fidodido/archive/2005/09/06/12197.html^ Mustang ^^ Mustang ^Tue, 06 Sep 2005 04:01:00 GMThttp://www.aygfsteel.com/fidodido/archive/2005/09/06/12197.htmlhttp://www.aygfsteel.com/fidodido/comments/12197.htmlhttp://www.aygfsteel.com/fidodido/archive/2005/09/06/12197.html#Feedback0http://www.aygfsteel.com/fidodido/comments/commentRss/12197.htmlhttp://www.aygfsteel.com/fidodido/services/trackbacks/12197.html一、概q?/H4>
当不需要全部实现适配器接口提供的ҎӞ可先设计一个抽象类实现适配器接口,qؓ接口中每个方法提供一个默认实玎ͼI方法)。那么该抽象cȝ子类可有选择地覆盖父cȝ某些Ҏ来实现需求?/P>
二、结?/H4>

三、动?/H4>
对于一个接口不想用其所有的Ҏ时?/P>
]]> - A beginners guide to Dependency Injection [转蝲自TSS]http://www.aygfsteel.com/fidodido/archive/2005/08/08/9610.html^ Mustang ^^ Mustang ^Mon, 08 Aug 2005 14:30:00 GMThttp://www.aygfsteel.com/fidodido/archive/2005/08/08/9610.htmlhttp://www.aygfsteel.com/fidodido/comments/9610.htmlhttp://www.aygfsteel.com/fidodido/archive/2005/08/08/9610.html#Feedback0http://www.aygfsteel.com/fidodido/comments/commentRss/9610.htmlhttp://www.aygfsteel.com/fidodido/services/trackbacks/9610.html阅读全文

]]> - 适配器模式(AdapterQ?/title>http://www.aygfsteel.com/fidodido/archive/2005/08/06/9484.html^ Mustang ^^ Mustang ^Sat, 06 Aug 2005 11:39:00 GMThttp://www.aygfsteel.com/fidodido/archive/2005/08/06/9484.htmlhttp://www.aygfsteel.com/fidodido/comments/9484.htmlhttp://www.aygfsteel.com/fidodido/archive/2005/08/06/9484.html#Feedback0http://www.aygfsteel.com/fidodido/comments/commentRss/9484.htmlhttp://www.aygfsteel.com/fidodido/services/trackbacks/9484.html一、概q?/H3>
cȝ适配器模式把被适配的类的API转换成ؓ目标cȝAPI
二、结?/H3>
1、类的适配器模?/H4>

TargetQ所期待得到的接?/P>
AdapteeQ现有需要适配的类
AdapterQ把源接口{化成目标接口的核心类
2、对象的适配器模?/H4>

i、同一个适配器可以把源和其子c都适配到目标接?/P>
ii、与cȝ适配器相比,要覆盖源cȝҎ不很ҎQ除非做一个源cȝ子类Q然后对子类适配
iii、可以很方便地添加一个方?/P>
三、动?/H3>
1、系l需要用现有的c,而该cȝ接口不符合系l新的需?/P>
2、需要徏立一个可复用的类用于使一些彼此之间没有太大关pȝcM同工?/P>
3、需要改变多个已有的子类的接?/P>
]]> - 原型模式QPrototypeQ?/title>http://www.aygfsteel.com/fidodido/archive/2005/08/05/9376.html^ Mustang ^^ Mustang ^Fri, 05 Aug 2005 02:54:00 GMThttp://www.aygfsteel.com/fidodido/archive/2005/08/05/9376.htmlhttp://www.aygfsteel.com/fidodido/comments/9376.htmlhttp://www.aygfsteel.com/fidodido/archive/2005/08/05/9376.html#Feedback0http://www.aygfsteel.com/fidodido/comments/commentRss/9376.htmlhttp://www.aygfsteel.com/fidodido/services/trackbacks/9376.html一、概q?/H3>
原型模式属于对象创徏模式Q通过l出一个原型对象来指明所要创建的对象cdQ然后用复制q个对象的方法创建出更多同类型的对象?BR>
二、结?/H3>
1、简单Ş?/H4>

ClientQ提出创建对象的h
PrototypeQ抽象角Ԍl出所有具体原型类所需的接?/FONT>
ConcretePrototypeQ被复制的对?BR>
2、登记Ş?/H4>

PrototypeManagerQ创建ƈ记录具体对象
三、浅克隆与深克隆
克隆:仅做refrence一U的克隆Qrefrence所指的对象不被克隆
深克隆:refrence所指的对象q行递归克隆Q需考虑克隆深度及@环克隆问?/FONT>
四、动?/H3>
替换较复杂的{l构的工厂方?/FONT>
五、优~点
1?/FONT>允许动态地增加或减品类Q且Ҏ个现有的产品l构没有影响
2?/FONT>提供化的创徏l构
3?/FONT>h动态加载新功能的能?/FONT>
4?/FONT>产品cM需要有定的等U结?/FONT>
I?/FONT>每一个类必须配备一个克隆方?/FONT>

]]> - 使用{略模式QStrategyQ实现多关键字排?/title>http://www.aygfsteel.com/fidodido/archive/2005/08/04/9181.html^ Mustang ^^ Mustang ^Thu, 04 Aug 2005 04:37:00 GMThttp://www.aygfsteel.com/fidodido/archive/2005/08/04/9181.htmlhttp://www.aygfsteel.com/fidodido/comments/9181.htmlhttp://www.aygfsteel.com/fidodido/archive/2005/08/04/9181.html#Feedback2http://www.aygfsteel.com/fidodido/comments/commentRss/9181.htmlhttp://www.aygfsteel.com/fidodido/services/trackbacks/9181.html
“策略模式”的出现Q是Z提供一套相互之间可灉|替换的算法,在不影响上层接口的情况下Q用户可以自由选择不同的算法完成逻辑?/SPAN>
{略模式?/SPAN>UMLC意囑֦下:
其中法的模型接口在“抽象策略”中定义Q各兯{略实现不同的策略。“消?/SPAN>API”就是调用不同算法的c,在其内部Ҏ不同需要选择不同的算法。有旉要将兯{略实例化后再传l其它类Q这时可以?I style="mso-bidi-font-style: normal">“简单工厂”(Simple FactoryQ?/SPAN>?I style="mso-bidi-font-style: normal">“工厂方法”(Factory MethodQ?/SPAN>生成所需的具象策略。下面就以我正在做的一个项目,化一下后说明一下策略模式的使用?/SPAN>
该项目是一个小型的商业|站Q逻辑层由Servlet实现。用h一个需求,需要从数据库调出商品信息后能够对记录按名称Q?/SPAN>nameQ、规|standardQ、h|priceQ和注册日期Q?/SPAN>register dateQ进行排序。虽然可以考虑按不同的排序关键字用不同的sql语句Q即不同?/SPAN>order byQ查询数据库。但q样做的|络数据量太大Q每ơ需要从数据库完整地取回一个数据集Q?/SPAN>ResultSetQ,所以我选择了将数据集一ơ取到客L的一?/SPAN>List中,然后在客L按不同的关键字对Listq行排序?/SPAN>
java.util.CollectionscM有一?/SPAN>public static void sort(List list, Comparator comparator)的方法,可以按照不同?/SPAN>Comparator对象?/SPAN>listq行排序Q它使用的是快速排序,所以效率非帔R。?/SPAN>java.util.Comparator是一个接口:
package java.util;


public abstract interface Comparator
{
boolean equals(Object object);

int compare(Object object, Object object1);
}


其中和排序有关的?/SPAN>compareҎQ它q回一个整敎ͼ若第一个参数比W二个参数“大”,则返回一个正敎ͼ若“小”则q回一个负敎ͼ若“相{”则q回0Q这里的“大”、“小”、“相{”是?/SPAN>compareҎ具体实现定义的一U比较标准。由q个Ҏ不禁惛_C语言?/SPAN>qsort函数中用的函数指针int *compare(*,*)Q?/SPAN>JAVA中之所以没有函数指针,是用接口取代了Q更详细的介l见?/SPAN>Effective Java》中W?/SPAN>22条“用cd接口来代替函数指针”)?/SPAN>
很明显,Comparator接口是我们的“抽象策略”,sortҎ是我们的“消?/SPAN>API”,而不同的“具象策略”就是我们从Comparator接口实现的根据不同关键字排序的类?/SPAN>
整个排序模型?/SPAN>UML囑֦下,其中Z作图方便Q我?/SPAN>Comparatorl承了一个接?/SPAN>ItemComparatorQ根据不同的关键字从ItemComparator接口泛化?/SPAN>NameComparatorc,PriceComparatorc,RegisterDateComparatorcdStandardComparatorcR实际运用中不需要这个接口,四个cd以直接从Comparator泛化?/SPAN>ItemBean是一个封装了商品信息?/SPAN>beanQ?/SPAN>List中存攄是q些bean?/SPAN>ItemSort?/SPAN>ItemComparator以及四个具体cdC“简单工厂”模式,q封装了sortҎ?/SPAN>
下面是具体的代码Q?/SPAN>StandardComparatorcȝ代码?/SPAN>NameComparatorcȝ代码大同异Q在q里不列出)Q?/SPAN>
NameComparatorc:
package com.lim.designpatterns.strategy;


public class NameComparator implements ItemComparator
{

NameComparator()
{} // 构造器装Q包外的cL得到Comparator实例只能通过单工?/SPAN>


public int compare(Object o1,Object o2)
{
String name1=((ItemBean)o1).getName();
String name2=((ItemBean)o2).getName();

return name1.compareTo(name2); // 调用String的CompareToҎ
}
}

PriceComparatorc?/SPAN>
package com.lim.designpatterns.strategy;


public class PriceComparator implements ItemComparator
{

PriceComparator()
{}


public int compare(Object o1,Object o2)
{
Double price1=new Double(((ItemBean)o1).getPrice());
Double price2=new Double(((ItemBean)o2).getPrice());

return price1.compareTo(price2); // 调用Double的CompareToҎ
}
}
RegisterDateComparatorc?/SPAN>
package com.lim.designpatterns.strategy;

import java.util.*;


public class RegisterDateComparator implements ItemComparator
{

RegisterDateComparator()
{}


public int compare(Object o1,Object o2)
{
Date date1=((ItemBean)o1).getRegisterDate();
Date date2=((ItemBean)o2).getRegisterDate();

return date1.compareTo(date2); // 调用Date的CompareToҎ
}
}
ItemSortc?/SPAN>
package com.lim.designpatterns.strategy;

import java.util.*;


public class ItemSort
{

public static List sort(List items,ItemComparator c)
{
Collections.sort(items,c);
return items;
}

public static final ItemComparator NAME=new NameComparator(); // 单工?/SPAN>

public static final ItemComparator PRICE=new PriceComparator();

public static final ItemComparator STANDARD=new StandardComparator();

public static final ItemComparator REG_DATE=new RegisterDateComparator();
}
TestItemSortc?/SPAN>
package com.lim.designpatterns.strategy;

import java.util.*;


public class TestItemSort
{

public static void main(String[] args)
{
List items=new ArrayList();
// 向Listd条目

items=ItemSort.sort(items,ItemSort.NAME); // 按名U排?/SPAN>

items=ItemSort.sort(items,ItemSort.PRICE); // 按h格排?/SPAN>

items=ItemSort.sort(items,ItemSort.REG_DATE); // 按注册日期排?/SPAN>

items=ItemSort.sort(items,ItemSort.STANDARD); // 按规格排?/SPAN>
}
} 
]]>
վ֩ģ壺
Ƥ|
ͭ|
|
ԭƽ|
³ľ|
Ӷ|
ƽ|
|
|
|
|
İ|
|
|
ͷ|
|
캵|
|
γ|
֯|
|
ʦ|
|
|
ˮ|
|
ʲ|
¡|
ƽ|
|
|
ٰ|
|
|
|
|
|
|
ϲ|
|
;|