简单工厂模式
- 使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man对象,如果传入参数“W”,则返回一个Woman对象,用Java语言实现该场景。现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意“女娲”的变化。
首先定义一个接口
public interface Person {
}
然后三个子类继承这个接口,顺便附加构造方法
public class Man implements Person {
public Man() {
System.out.println("Hi, I'm a man.");
}
}
其他两个类也使用类似的方法
Nvwa作为工厂类
public class Nvwa {
public static Person createPerson(String type) {
if ("M".equals(type)) {
return new Man();
} else if ("W".equals(type)) {
return new Woman();
} else if ("R".equals(type)) {
return new Robot();
} else {
throw new IllegalArgumentException("Invalid type: " + type);
}
}
}
最后进行测试
import java.util.Scanner;
public class TestPerson {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Nvwa nvwa = new Nvwa();
System.out.println("ernter R or M or N");
Person person = Nvwa.createPerson(scan.nextLine());
System.out.println(person);
}
}
- 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式的图片。图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory和JpgReaderFactory用于创建具体的图片读取器对象。使用工厂方法模式实现该程序的设计。
首先是接口ImageReader
public interface ImageReader {
void readImage(String imageName);
}
然后是ImageReaderFactory
public abstract class ImageReaderFactory {
public abstract ImageReader createImageReader();
}
接下来是对应的子类GifReader,JpgReader同理
public class GifReader implements ImageReader {
public void readImage(String imageFile) {
// 读取 GIF 格式的图片
System.out.println("Reading GIF image: " + imageFile);
}
}
以及对应的工厂
public class GifReaderFactory extends ImageReaderFactory {
@Override
public ImageReader createImageReader() {
return new GifReader();
}
}
测试
public class TestReader {
public static void main(String[] args) {
// 创建GIF图片读取器
ImageReaderFactory gifReaderFactory = new GifReaderFactory();
ImageReader gifReader = gifReaderFactory.createImageReader();
gifReader.readImage("image.gif");
// 创建JPG图片读取器
ImageReaderFactory jpgReaderFactory = new JpgReaderFactory();
ImageReader jpgReader = jpgReaderFactory.createImageReader();
jpgReader.readImage("image.jpg");
}
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。