工厂模式有什么用呢?
最直观的好处,可以忽悠人啊!你写代码的时候说你用了设计模式,是不是显得高大上了点啊。工厂模式是把创建过程和使用过程分开,当创建一个对象特别麻烦时,可以用工厂模式帮你创建,那么你就不必要在意太多细节。
什么叫做创建过程复杂呢,比如你想这么创建 A a=new A(),可是实际上可能是这么创建 A a=new A(参数A,参数B、参数C…),你很难记住,这时候工厂可以直接创建,是不是很贴心啊。比如说SQL的连接。
DBconnection sample = DBFactory.createSQLConnection()
还有一种情况, A a=new A1(),A有超多的子类,你在很多地方都用了这个代码,万一需求变了,要变成A a=new A2(),你需要再每个位置把A1改为A2,这样很麻烦的,工厂又能帮你很贴心的创建完成。下面给出例子。现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计个图片读取器( ImageReader),如GIF图片读取器( GifReader)用于读取GIF格式的图片、JPG图片读取器( Jpgreader)用于读取JPG格式的图片。
先定义图像抽象类
public abstract class ImageReader {
public abstract void read();
}
gif继承image
public class GifReader extends ImageReader {
@Override
public void read() {
System.out.println("读取gif图片");
}
}
jpg继承img
public class JpgReader extends ImageReader {
@Override
public void read() {
System.out.println("读取jpg图片");
}
}
现在到了创建对象的时候了,我们先定义工厂接口imageFactory
public interface ImageReaderFactory {
ImageReader GetImage();
}
gifFactory创建gif对象
public class GifReaderFactory implements ImageReaderFactory {
@Override
public ImageReader GetImage() {
return new GifReader();
}
}
jpgFactory创建jpg对象
public class JpgReaderFactory implements ImageReaderFactory {
@Override
public ImageReader GetImage() {
return new JpgReader();
}
}
测试类
public class test {
public static void main(String[] args) {
ImageReaderFactory factory=new JpgReaderFactory();
ImageReader imageReader=factory.GetImage();
imageReader.read();
ImageReaderFactory factory1=new GifReaderFactory();
ImageReader imageReader1 = factory1.GetImage();
imageReader1.read();
}
}