http://oldboy-bj.taobao.com/

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

http://35java.com/zhibo/forum.php?mod=viewthread&tid=34&extra=page%3D4

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。



适用性



1.
一个系统要独立于它的*品的创建、组合和表示时。


2.
一个系统要由多个产品系列中的一个来配置时。


3.
当你要强调一系列相关的产品对象的设计以便进行联合使用时*

4*
当你提供一个产品类库,而只想显示它们*接口而不是实现时。





参与者



1.Ab*tractFactory

声明一个创建抽象产品对象的操作接口。


2.ConcreteFactory

实现创建具体产品对象的操作。


*.AbstractProduct

为一类产品对象声明一个接口。


4.ConcreteProdu*t

定义一个将被相应的具体工厂创建的产品*象。

实现*bstractProduct接口。


5.Client

仅使用由AbstractFactory和AbstractProduc*类声明的接口



类图



例子

*bstractFactory


public interface IAn*malFactory {

ICat createCat();


IDog cre*teDog();
}

ConcreteFactory


p*blic class BlackAnimalFactory implem*nts IAnimalFactory {

public ICat createCat() {

retur* new BlackCat();

}


public IDog createDog() {

return new BlackDog();

}

}
public class WhiteAnimalFac*ory imp*ements IAnimalFactory {

public ICat createCat() {

return new WhiteCat();

}


public IDog cre*teDog() {

return new WhiteDog();

}

}

Abstrac*Product


public interface ICat {

void eat();
}
public interface IDog {

void eat();
}

Concrete*roduct


public class Black*at implements ICat {

public void eat() {

System.out.println("The bl*ck cat is eating!");

}

}
public class WhiteCat implements *Cat {

public void eat() {

Sy*tem.out.prin*ln("The w*ite cat is eating!*);

}

}
public class BlackDog implements IDog {

public void eat() {

System.out.println("The black dog is eating");

}

}
public class WhiteDog implements IDog {

public void eat() {

System.out.println("The white dog is eat*ng!");

}

}

Client


public static void main(String[] args) {
IAnimalFactory blackAnimalFa*tory = new BlackAnimalFactory();

ICat blackCat = blackAnimalFactory.createCat();

blackCat.eat();

IDog blackD*g = blackAnimalFactory.createDog();

blackDog.eat();


IAnimalFactory whiteAnimalF*ctory = new WhiteAnimalFactory();

ICat whiteCat = whiteAnimalFactory.createCat();

whiteCat.eat();

IDog *hiteDog = whiteAnimalFactory.createDog();

whiteDog.eat();
}

res*lt


The bla*k cat is eating!Th* black dog is eatin*!The white cat is eating!The white dog is *ating!

posted on 2011-01-05 19:38  老男孩咖啡  阅读(128)  评论(0)    收藏  举报