您的位置:首页 > 编程语言 > Java开发

java 设计模式之抽象工厂(2)

2013-09-16 08:30 337 查看
1.1.2 抽象工厂

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

适用性

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!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: