Java设计模式(疯狂Java联盟版)
public Work getWork() {
*eturn new StudentWork(); } }
public class TeacherWorkFactory implements IWorkFactory {
public Work getWork() {
return new TeacherWork(); } }
Test
public class Test {
public static void m*in(Strin*[] args) {
IWorkFactory studentWorkFactory = new StudentWorkFactory(); studentWorkFactory.getWork().d*Work();
IWorkFactory teacherWorkFactory * new TeacherWorkFactory(); teacherWorkFactory.g*tWork().*oWork(); } }
result
学生做作业! 老师审批作业!
1.1.2 抽象工厂
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性
1.一个系统要独立于它的*品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时*
5
Java设计模式(疯狂Java联盟版)
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
6
Java设计模式(疯狂Java联盟版)
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(\ } }
7
Java设计模式(疯狂Java联盟版)
public class WhiteCat implements *Cat {
public void eat() {
Sy*tem.out.prin*ln(\ } }
public class BlackDog implements IDog {
public void eat() {
System.out.println(\ } }
public class WhiteDog implements IDog {
public void eat() {
System.out.println(\ } }
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!
8
Java设计模式(疯狂Java联盟版)
The white dog is *ating!
1.1.3 建造者模式
将一个复杂对象的构*与它的表示分离,使*同样的构建过程可以创建不同的表示。
适用性
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
*.当构造过程必须允*被构造的对象有不同*表示时。
参与者
1.Builder
为创建一个Product对象的各个部件指定抽象接口。
2.ConcreteBuilder
实现Buil*er的接口以构造和装配该产品的各个部件。 定义并明确它所创建的表示* 提供一个检索产品的接口。
3.Director
构造一个使用Builder接口的对象。
4.Product
表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
类图
9