??xml version="1.0" encoding="utf-8" standalone="yes"?>国产真实乱对白精彩久久,国产蜜臀av在线一区二区三区,综合激情一区http://www.aygfsteel.com/sailor/category/33145.html在一|情q日子里,谁能说得清是苦是甜,只知道确定了׃无反?/description>zh-cnSat, 26 Jul 2008 08:19:34 GMTSat, 26 Jul 2008 08:19:34 GMT60- 模式Q九Q:模板ҎQTemplate MethodQ模?/title>http://www.aygfsteel.com/sailor/articles/217607.htmlsailorsailorSat, 26 Jul 2008 00:25:00 GMThttp://www.aygfsteel.com/sailor/articles/217607.htmlhttp://www.aygfsteel.com/sailor/comments/217607.htmlhttp://www.aygfsteel.com/sailor/articles/217607.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/217607.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/217607.html阅读全文

]]> - 模式Q八Q:外观QFacadeQ模?/title>http://www.aygfsteel.com/sailor/articles/217379.htmlsailorsailorFri, 25 Jul 2008 02:26:00 GMThttp://www.aygfsteel.com/sailor/articles/217379.htmlhttp://www.aygfsteel.com/sailor/comments/217379.htmlhttp://www.aygfsteel.com/sailor/articles/217379.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/217379.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/217379.html定义
提供了一个统一的接口,用来讉K字系l中的一接口,外观定义了一个高层接口,让子pȝ更容易用?br />
要点
当需要简化ƈl一一个很大的接口或者一复杂的接口Ӟ使用外观?br />
外观客户从一个复杂的子系l中解耦?/p>
实现一个外观,需要将子系l组合进外观中,然后工作委托给子系l执行?br />
外观一对?#8220;包装”h以简化其接口?br />
实例

例子Qhttp://www.jdon.com/designpatterns/designpattern_Facade.htm
参考资料:《First Head 设计模式?br />
http://www.jdon.com/designpatterns/designpattern_Facade.htm

]]> - 模式Q七Q:适配器(AdapterQ模?/title>http://www.aygfsteel.com/sailor/articles/217347.htmlsailorsailorFri, 25 Jul 2008 01:17:00 GMThttp://www.aygfsteel.com/sailor/articles/217347.htmlhttp://www.aygfsteel.com/sailor/comments/217347.htmlhttp://www.aygfsteel.com/sailor/articles/217347.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/217347.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/217347.html定义
一个类的接口,转换成客h望的另一个接口。适配器让原本不兼容的cd以合作无间?br />
c适配器可以分为类适配器和对象适配?/font>

实用?br />
当需要私用一个现有的c而其接口q不W合你需要的Ӟ׃用适配器;
适配器改变接口以W合用户的期望;
实例

1
package com.sailor.adapter;
2
3
4
/** *//**
5
* 被适配?br />
6
* @author sailor
7
* Jul 25, 2008 9:35:19 AM
8
*/
9
public class Duck
{
10
11
public Duck()
{
12
13
}
14
15
public void fly()
{
16
System.out.println("I can fly");
17
}
18
19
public void quack()
{
20
System.out.println("quake!");
21
}
22
}
23
1
2
package com.sailor.adapter;
3
4
/** *//**
5
* 目标接口
6
* @author sailor
7
* Jul 25, 2008 9:43:35 AM
8
*/
9
public interface Turkey
{
10
11
public void gobble();
12
public void fly();
13
}
14
1
2
package com.sailor.adapter;
3
4
/** *//**
5
* 适配?br />
6
* @author sailor
7
* Jul 25, 2008 9:38:10 AM
8
*/
9
public class TurkeyAdapter implements Turkey
{
10
11
private Duck duck;
12
13
public TurkeyAdapter(Duck duck)
{
14
this.duck = duck;
15
}
16
17
public void gobble()
{
18
duck.quack();
19
}
20
21
public void fly()
{
22
duck.fly();
23
}
24
25
26
}
27
1
2
package com.sailor.adapter;
3
4
/** *//**
5
* 客户?br />
6
* @author sailor
7
* Jul 25, 2008 9:45:29 AM
8
*/
9
public class Client
{
10
11
/** *//**
12
* @param args
13
*/
14
public static void main(String[] args)
{
15
16
Duck duck = new Duck();
17
18
Turkey turkey = new TurkeyAdapter(duck);
19
20
turkey.gobble();
21
turkey.fly();
22
}
23
24
}
25
参考资料:《First Head 设计模式?/p>

]]>- 模式Q六Q:命oQCommandQ模?/title>http://www.aygfsteel.com/sailor/articles/217246.htmlsailorsailorThu, 24 Jul 2008 09:20:00 GMThttp://www.aygfsteel.com/sailor/articles/217246.htmlhttp://www.aygfsteel.com/sailor/comments/217246.htmlhttp://www.aygfsteel.com/sailor/articles/217246.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/217246.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/217246.html定义
?#8220;h”装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作?br />
要点
命o模式发求的对象和接受请求的对象解耦;
在被解耦的两者之间是通过命o对象q行沟通的。命令对象封装了接收者和一个或者一l对象;
调用者通过调用命o对象的execute()发出hQ这会得接受者的动作被调用;
调用者可以接受命令当作参敎ͼ甚至在运行时动态地q行Q?br />
命o也可以实现日志和实务pȝ?br />
所涉及的角Ԍ
1.客户QClientQ角Ԍ创徏一个具体对象及其确定接收?
2.命oQCommandQ角?声明了一个给所有具体命令类的抽象接口?br />
3.具体命o(ConcreteCommand)角色:定义一个接收者与行ؓ之间的弱耦合Q实现exceute()ҎQ负责调用接收者的相应操作?br />
4.h?Invoker)角色:负责调用命o对象执行h?br />
5.接收者(ReceviceQ角?负责具体实施与执行一个请求?br />

优点Q?br />
解耦了发送者和接受者之间联pR?发送者调用一个操作,接受者接受请求执行相应的动作Q因Z用Command模式解耦,发送者无需知道接受者Q何接口?br />
命o模式创徏的一般步?/strong>Q?br />
1.客户端创Z个ConcreteCommand对象Qƈ指明接收者?br />
2.h对象保持ConcreteCommand对象?br />
3.h对象通过调用actionҎ发出hQ若命o是可撤消,则ConcreteCommand保存execute()Ҏ执行前的状态?br />
4.ConcreteCommand对象调用接收的方法执行请求?br />
实例
抽象命o接口Q?br />
package command;

public interface Command
{
//执行Ҏ
void execute();
}
具体命o
package command;

public class ConcreteCommand implements Command
{
//接收?/span>
private Receiver receiver;
//构造方?/span>

public ConcreteCommand(Receiver receiver)
{
this.receiver=receiver;
}
//执行Ҏ

public void execute()
{
receiver.action();
}
}
接收者:
package command;

public class Receiver
{
//构造方?/span>

public Receiver()
{};
//行ؓҎ

public void action()
{
System.out.println("Action is taken here");
}
}
h者:
package command;

public class Invoker
{
//命o
private Command command;
//构造方?/span>

public Invoker(Command command)
{
this.command=command;
}
//行ؓҎ

public void action()
{
command.execute();
}
}
客户端:
package command;

public class Client
{

public static void main(String[] args)
{
Receiver receiver=new Receiver();
Command concreteCommand=new ConcreteCommand(receiver);
Invoker invoker=new Invoker(concreteCommand);
invoker.action();
}
}
命o模式与责任链模式区别Q?br />
责Q链模式一个特定的h接收对象对请求与命o的执行变得不定?而命令模式得一个特定的对象对命令的执行变得明显与确?
参考资料:《First Head 设计模式?br />
设计模式学习W记(十五)--------命o(Command)模式

]]> - 模式Q五Q:单gQsingletonQ模?/title>http://www.aygfsteel.com/sailor/articles/216787.htmlsailorsailorWed, 23 Jul 2008 01:51:00 GMThttp://www.aygfsteel.com/sailor/articles/216787.htmlhttp://www.aygfsteel.com/sailor/comments/216787.htmlhttp://www.aygfsteel.com/sailor/articles/216787.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/216787.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/216787.html定义
保一个类只有一个实例,q提供全局讉K?br />
设计原则
在JAVA中实现单件模式需要一个私有的构造器、一个静态方法和一个静态变量;
定在性能和资源上的限Ӟ然后心地选择适当的方案来实现单gQ以解决多线E的问题Q?br />
如果不是采用W五版的java 2Q双重检查锁实现会失效;
实现
1、lazy singleton
1
public class Singleton
{
2
3
private static Singleton uniqueInstance;
4
5
private Singleton()
{} //U有构造器
6
7
public static Singleton getInstance()
{
8
9
if(uniqueInstance == null)
{
10
11
uniqueInstance = new Singleton();
12
}
13
14
return uniqueSingleton
15
}
16
}
2、处理多U程
q是保证可行的最直接做法Q对于性能如果没有考虑Q可以直接用q个Ҏ?/p>
1
public class Singleton
{
2
3
private static Singleton uniqueInstance;
4
5
private Singleton()
{} //U有构造器
6
7
public static synchronized Singleton getInstance()
{
8
9
if(uniqueInstance == null)
{
10
11
uniqueInstance = new Singleton();
12
}
13
14
return uniqueSingleton
15
}
16
}
3、急切实例?br />
1
public class Singleton
{
2
3
private static uniqueInstance = new Singleton();
4
5
private Singleton()
{}
6
7
public static Singleton getInstance()
{
8
9
return uniqueInstance;
10
}
11
12
}
4、用“双重查加?#8221;Q在getInstance( )中减用同?br />
׃没有性能上考虑Q所以这个方法似乎杀鸡用了牛刀。另外这个方法还得确定用的是java5以上的版本?br />
1
package com.sailor.singleton;
2
3
/** *//**
4
* @author sailor
5
* Jul 23, 2008 9:46:17 AM
6
*/
7
public class Singleton
{
8
9
private volatile static Singleton uniqueInstance;
10
11
private Singleton()
{}
12
13
public static Singleton getInstance()
{
14
if(uniqueInstance == null)
{
15
synchronized(Singleton.class)
{
16
if(uniqueInstance == null)
{
17
uniqueInstance = new Singleton();
18
}
19
}
20
}
21
return uniqueInstance;
22
}
23
}

]]> - 模式Q四-3Q:抽象工厂(Abstract Factory)模式http://www.aygfsteel.com/sailor/articles/216666.htmlsailorsailorTue, 22 Jul 2008 09:22:00 GMThttp://www.aygfsteel.com/sailor/articles/216666.htmlhttp://www.aygfsteel.com/sailor/comments/216666.htmlhttp://www.aygfsteel.com/sailor/articles/216666.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/216666.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/216666.html定义
提供一个接口,用于创徏相关或相依赖对象的家族,而不需要明指定具体类?br />
原则
依赖抽象Q而不要依赖具体类
实用?br />
1Q一个系l应当不依赖于品类实例被创立,l成Q和表示的细节。这对于所有Ş态的工厂模式都是重要的?
2Q这个系l的产品有多于一个的产品?/span>?
3Q?span style="color: #ff0000">同属于同一个品族的品是设计成在一起?/span>的。这一U束必须得在pȝ的设计中体现出来?
角色

?. 抽象工厂模式的类囑֮? |
从上囑֏以看出,单工厂模式涉及到以下的角?
抽象工厂(AbstractFactory)cL接口
担Qq个角色的是工厂Ҏ模式的核心,它是与应用程序无关的。Q何在模式中创立对象的工厂cdd现这个接口,或承这个类?
实工厂类 (Conrete Factory)
担Qq个角色的是与应用程序紧密相关的Q直接在应用E序调用下,创立产品实例的那样一些类?
抽象产品 (Abstract Product)
担Qq个角色的类是工厂方法模式所创立的对象的父类Q或它们共同拥有的接口?
实?(Concrete Product)
担Qq个角色的类是工厂方法模式所创立的Q何对象所属的cR?/span>
实例

抽象工厂模式应用于小花果园系l中。三U不同的背景颜色可以区分工厂c,蔬菜c?W一产品?Q和水果cȝcd(W二产品?

]]> - 模式Q四-2Q:工厂ҎQFactrory MethodQ模?/title>http://www.aygfsteel.com/sailor/articles/216546.htmlsailorsailorTue, 22 Jul 2008 02:49:00 GMThttp://www.aygfsteel.com/sailor/articles/216546.htmlhttp://www.aygfsteel.com/sailor/comments/216546.htmlhttp://www.aygfsteel.com/sailor/articles/216546.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/216546.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/216546.html定义
定义了一个创建对象的接口Q但由子cd定要实例化的cL哪一个。工厂方法让cL实例化推q到子类?br />
原则
依赖抽象Q不依赖具体实现Q依赖倒装Q?br />
工厂Ҏ使用l承Q把对象的创建委托给子类Q子cd现工厂方法来创徏对象。这个原则说明了不能让高层组件依赖底层组Ӟ而且Q高层组件和底层lg都应该依赖于抽象?br />
角色

从上囑֏以看出,工厂Ҏ模式涉及C下的角色
抽象工厂接口(Creator)
担Qq个角色的是工厂Ҏ的核心,它是与应用程序无养I创徏的工厂类必须实现该接口?br />
实工厂类 (Conrete Creator)
担Qq个角色的是与应用程序紧密相关的Q直接在E序的调用下创徏具体的品?br />
产品 (Product)
担Qq个角色的是工厂Ҏ模式所创徏对象的父c,或者是必须实现的接口?br />
实?(Concrete Product)
担Qq个角色的是工厂Ҏ模式所创徏对象所属的cR?br />
工厂Ҏ模式和简单工厂模式在定义上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模? 把核心放在一个实cM。工厂方法模式可以允许很多实的工厂类从抽象工厂类l承下来, 从而可以在实际上成为多个简单工厂模式的l合,从而推q了单工厂模式?br />
反过来讲,单工厂模式是由工厂方法模式退化而来。设惛_果我们非常确定一个系l只需要一个实的工厂类, 那么׃妨把抽象工厂cdq到实的工厂cM厅R而这样一?我们退化到单工厂模式了?
工厂Ҏ模式又叫多Ş性工厂模式,昄是因为实工厂c都有共同的接口Q或者都有共同的抽象父类?br />
实例Q??
参考资料:《First Head 设计模式?br />
?a id="viewpost1_TitleUrl" href="http://www.aygfsteel.com/flying/archive/2006/07/12/57731.html">菜鸟学设计模?------工厂Ҏ(Factory Method)模式 ?br />

]]> - 模式目录http://www.aygfsteel.com/sailor/articles/216544.htmlsailorsailorTue, 22 Jul 2008 02:47:00 GMThttp://www.aygfsteel.com/sailor/articles/216544.htmlhttp://www.aygfsteel.com/sailor/comments/216544.htmlhttp://www.aygfsteel.com/sailor/articles/216544.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/216544.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/216544.html模式Q一Q:{略QStrategyQ模?/a>
模式Q二Q:观察者(ObserverQ模?/a>
模式Q三Q:装饰者(DecoratorQ模?/a>
模式Q四-1Q:?Simple Factory)工厂模式
模式Q四-2Q:工厂ҎQFactrory MethodQ模?/a>
模式Q四-3Q:抽象工厂(Abstract Factory)模式
模式Q五Q:单gQsingletonQ模?/a>
模式Q六Q:命oQCommandQ模?/a>
模式Q七Q:适配器(AdapterQ模?/a>
模式Q八Q:外观QFacadeQ模?/a>
模式Q九Q:模板ҎQTemplate MethodQ模?/a>

]]> - 模式Q四-1Q:单工厂(Simple FactoryQ模?/title>http://www.aygfsteel.com/sailor/articles/216538.htmlsailorsailorTue, 22 Jul 2008 02:03:00 GMThttp://www.aygfsteel.com/sailor/articles/216538.htmlhttp://www.aygfsteel.com/sailor/comments/216538.htmlhttp://www.aygfsteel.com/sailor/articles/216538.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/216538.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/216538.html
一、工厂模式有三种形?/strong>
单工?Simple Factory)模式 Q又U静态工厂模?br />
工厂Ҏ(Factory Method)模式,又称多Ş性工?Polymorphic Factory)模式
抽象工厂(Abstract Factory)模式,又称工具?Kit或Toolkit)模式
二、简单工厂模?/h4>
《Head First 设计模式》认为它不是一个设计模式,更像一U编E习惯,优点是可以将客户端程序从具体cM解耦,不失Z个简单的Ҏ?br />
1、定?br />
单工厂模式是׃个工厂对象决定创建出那一U品类的实例,它是׃个工厂类Ҏ传入的参量决定创建出哪一U品类的实例?
2、角?/strong>
单工厂模式涉及到工厂角色、抽象角色以及具体品角色等
工厂c(CreatorQ角Ԍ担Qq个角色的是工厂Ҏ模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客L的直接调用下创徏产品对象Q它往往׃个具体的JAVAcd现?br />
抽象产品QProductQ角Ԍ担Qq个角色的类是工厂方法模式所创徏的对象的父类Q或他们共同拥有的接口。抽象品角色可以用一个java接口或者Java抽象cd现?br />
具体产品QConcrete ProductQ角Ԍ工厂Ҏ模式所创徏的Q何对象是q个角色的实例,具体产品角色׃个具体javacd现?br />
3、实?br />
1
package com.sailor.simpleFactory;
2
3
public abstract class Product
{
4
5
public void produce()
{
6
System.out.println("生产品");
7
}
8
9
public abstract void category();
10
11
12
public abstract int salePrice();
13
14
}
15
1
/** *//**
2
*
3
*/
4
package com.sailor.simpleFactory;
5
6
/** *//**
7
* 具体产品
8
* @author sailor
9
* Jul 22, 2008 10:15:14 AM
10
*/
11
public class Car extends Product
{
12
13
@Override
14
public void category()
{
15
System.out.println("生汽?/span>");
16
}
17
18
@Override
19
public int salePrice()
{
20
return new Integer(10000);
21
}
22
23
}
24
1
package com.sailor.simpleFactory;
2
3
/** *//**
4
* 具体产品
5
* @author sailor
6
* Jul 22, 2008 10:17:12 AM
7
*/
8
public class Pizza extends Product
{
9
10
@Override
11
public void category()
{
12
System.out.println("生Pizza");
13
}
14
15
@Override
16
public int salePrice()
{
17
return 20;
18
}
19
20
}
1
/** *//**
2
* 工厂
3
* @author sailor
4
* Jul 22, 2008 10:13:23 AM
5
*/
6
public class SimpleFactory
{
7
8
public static Product createProduct(String product)
{
9
if("car".equals(product))
10
return new Car();
11
else if("pizza".equals(product))
12
return new Pizza();
13
else
14
return null;
15
}
16
}
1
package com.sailor.simpleFactory;
2
3
/** *//**
4
* 客户?br />
5
* @author sailor
6
* Jul 22, 2008 10:20:59 AM
7
*/
8
public class Client
{
9
10
/** *//**
11
* @param args
12
*/
13
public static void main(String[] args)
{
14
15
Product product1 = SimpleFactory.createProduct("car");
16
product1.category();
17
product1.produce();
18
System.out.println("销售额Q?nbsp;" + product1.salePrice());
19
20
21
Product product2 = SimpleFactory.createProduct("pizza");
22
product2.category();
23
product2.produce();
24
System.out.println("销售额Q?nbsp;" + product2.salePrice());
25
}
26
}

]]> - 模式Q三Q:装饰者(decoratorQ模?/title>http://www.aygfsteel.com/sailor/articles/216326.htmlsailorsailorMon, 21 Jul 2008 04:15:00 GMThttp://www.aygfsteel.com/sailor/articles/216326.htmlhttp://www.aygfsteel.com/sailor/comments/216326.htmlhttp://www.aygfsteel.com/sailor/articles/216326.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/216326.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/216326.html1、定?br />
动态地责任附加到对象上。若要扩展功能,装饰着提供了比l承者更有弹性的替代Ҏ?br />
2、原?/strong>
Z互对象之间的耦合设计而努?br />
Ҏ展开放,对修改关?br />
3、适用环境
在不影响其他对象的情况下Q以动态、透明的方式给单个对象d职责?br />
处理那些可以撤消的职责?br />
当不能采用生成子cȝҎq行扩充时。一U情冉|Q可能有大量独立的扩展,为支持每一U组合将产生大量的子c,使得子类数目呈爆炸性增ѝ另一U情况可能是因ؓcd义被隐藏Q或cd义不能用于生成子cR?br />
4、本模式中的角色
抽象构g(Component):l出一个抽象接口,以规范准备接攉加责ȝ对象?br />
具体构g(Concrete Component)Q?/strong>定义一个接收到附加责Q的类?br />
装饰QDecoratorQ?持有一个构件对象的实例Qƈ定义与抽象构件一致的接口?br />
具体装饰QConcrete DecoratorQ?负责l构件对象脓上附加的责Q?br />

Q图例)
具体例子Q?br />
先定义抽象构Ӟ
package decorator;
//抽象构g接口

public interface Component
{
public void sampleOperation();
}
一个具体构?---门:
package decorator;
//具体构g-----?/span>

public class Door implements Component
{
//实现Ҏ

public void sampleOperation()
{
System.out.println("build a door");
}
}
装饰(抽象c?Q?br />
package decorator;


public abstract class Decorator implements Component
{
//持有一个构件对象的实例
private Component component;
//构造方?/span>

public Decorator(Component component)
{
this.component=component;
}
//Ҏ的具体实?/span>

public void sampleOperation()
{
component.sampleOperation();
}
}
具体装饰Q?br />
package decorator;
//具体装饰----把手

public class Knob extends Decorator
{


public Knob(Component component)
{
super(component);
}

public void sampleOperation()
{
super.sampleOperation();
//附加?责Q"
System.out.println("add a knob");
}
}
package decorator;
//具体装饰----?/span>

public class Lock extends Decorator
{


public Lock(Component component)
{
super(component);
}

public void sampleOperation()
{
super.sampleOperation();
//附加"责Q"
System.out.println("add a lock");
}
}
q行c:
package decorator;


public class DecoratorPattern
{

public static void main(String[] args)
{
Component door=new Door();
Component lock=new Lock(door);
Component knob=new Knob(lock);
knob.sampleOperation();
}
}
q行l果Q?br />
build a door
add a lock
add a knob
Press any key to continue...
参考资料:《Head First 设计模式?br />
设计模式学习W记Q十Q?-------装饰(Decorator)模式

]]> - 模式Q二Q:观察者(ObserverQ模?/title>http://www.aygfsteel.com/sailor/articles/216030.htmlsailorsailorSat, 19 Jul 2008 06:58:00 GMThttp://www.aygfsteel.com/sailor/articles/216030.htmlhttp://www.aygfsteel.com/sailor/comments/216030.htmlhttp://www.aygfsteel.com/sailor/articles/216030.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/216030.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/216030.html
在对象之间定义一对多的依赖,q样一来,当一个对象改变时状态,依赖他的对象会收到通知Qƈ自动更新。这U模式以松耦合方式在一些列对象之间改变状态。MVC模式是观察者模式的一个代表?br />
2、实用?br />
当一个抽象模型有两个斚w, 其中一个方面依赖于另一斚w。将q二者封装在独立的对象中以它们可以各自独立地改变和复用?nbsp;
当对一个对象的改变需要同时改变其它对? 而不知道具体有多对象有待改变?br />
当一个对象必通知其它对象Q而它又不能假定其它对象是谁。换a? 你不希望q些对象是紧密耦合的?br />
3、设计原?br />
扑ևE序中会变化的方面,然后其和固定不变的斚w相分?/strong>
在观察者模式中Q会改变的是主题的状态,以及观察者的数目和类型。用q个模式Q你可以依赖于主题状态的对象Q却不必改变主题。这叫提前规划?br />
针对接口~程Q不针对实现~程
主题与观察者都使用接口Q观察者利用主题的接口Q向主题注册Q而主题利用观察者的接口通知接口。这样可以让两者之间运作正常,又同事具有松耦合的优炏V?br />
多用l合Q少用?/strong>
观察者模式利?#8220;l合”Q将许多观察者组合进主题中。对象之间的q种关系不是通过l承产生的,而是在运行时利用l合的方式而生的?br />
4、实?br />

]]> - 模式Q一Q:{略QStrategyQ模?/title>http://www.aygfsteel.com/sailor/articles/216027.htmlsailorsailorSat, 19 Jul 2008 06:53:00 GMThttp://www.aygfsteel.com/sailor/articles/216027.htmlhttp://www.aygfsteel.com/sailor/comments/216027.htmlhttp://www.aygfsteel.com/sailor/articles/216027.html#Feedback0http://www.aygfsteel.com/sailor/comments/commentRss/216027.htmlhttp://www.aygfsteel.com/sailor/services/trackbacks/216027.html
设计原则Q?br />
1、多用组合,用l承Q?br />
2、针Ҏ口编E,而不是针对实现编E;
实现Q?br />

Context(应用场景):
l 需要?/span>ConcreteStrategy提供的算法?/span>
l 内部l护一?/span>Strategy的实例?/span>
l 负责动态设|运行时Strategy具体的实现算法?/span>
l 负责?/span>Strategy之间的交互和数据传递?br />
Strategy(抽象{略c?Q?/span>
l 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用q个接口调用不同的算法,一般用接口或抽象cd现?/span>
ConcreteStrategy(具体{略c?Q?/span>
l 实现?/span>Strategy定义的接口,提供具体的算法实现?br />
参考资料:《Head First设计模式?br />
?span style="font-family: 宋体">鸭子-{略模式Q?/span>StrategyQ?/span>?/a>

]]>
վ֩ģ壺
Խ|
̨|
|
|
ɶ|
|
˳|
Զ|
|
|
|
|
|
|
|
|
|
|
|
Ľ|
Ƽ|
ͭ|
Դ|
Ϳ|
ӱʡ|
ʡ|
|
|
Ұ|
ҵ|
|
|
|
Ӱ|
|
ʦ|
|
㽭ʡ|
|
|
¹Ȫ|