1.使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man对象,如果传入参数“W”,则返回一个Woman对象,用Java语言实现该场景。现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意“女娲”的变化。
2.现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式的图片。图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory和JpgReaderFactory用于创建具体的图片读取器对象。使用工厂方法模式实现该程序的设计。
1. 简单工厂模式。参考类图如下所示:
分析:在本实例中,Nvwa类充当工厂类,其中定义了工厂方法makePerson(),Person类充当抽象产品类,Man、Woman和Robot充当具体产品类。工厂方法makePerson()的代码如下所示:
public static Person makePerson(char arg) { Person person = null; switch(arg) { case 'M': person = new Man(); break; case 'W': person = new Woman(); break; case 'R': person = new Robot(); break; } return person; } |
如果需要增加一个新的具体产品,则必须修改makePerson()方法中的判断语句,需增加一个新的case语句,违背了开闭原则。
2. 工厂方法模式。参考类图如下所示:
分析:在本实例中,ImageReaderFactory充当抽象工厂,GifReaderFactory和JpgReaderFactory充当具体工厂,ImageReader充当抽象产品,GifReader和JpgReader充当具体产品。