设计一个程序来读取多种不同存储格式的图片,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF格式图片读取器(GifReader)用于读取GIF格式的图片,JPEG格式图片读取器(JpegReader)用于读取JPEG格式的图片,Tiff格式图片读取器(TiffReader)用于读取Tiff格式的图片。图片读取器对象通过图片读取器工厂(ImageReaderFactory)来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory、JpegReaderFactory和TiffReaderFactory用于创建具体的图片读取器对象。请使用工厂方法模式实现该程序的设计,并使用UML画出该模式的类图。
首先是UML类图,如下图所示:
代码如下:
abstract class ImageReader
{
public abstract void read();
public abstract void finish();
}
abstract class ImageReaderFactory
{
public abstract ImageReader getImageReader();
}
class GifReader:ImageReader
{
public override void read()
{
Console.WriteLine("读取GIF图片中.....");
}
public override void finish()
{
Console.WriteLine("读取GIF图片完成");
}
}
class GifReaderFactory:ImageReaderFactory
{
public override ImageReader getImageReader()
{
ImageReader ir = new GifReader();
return ir;
}
}
class JpegReader:ImageReader
{
public override void read()
{
Console.WriteLine("读取JPEG图片中.....");
}
public override void finish()
{
Console.WriteLine("读取JPEG图片完成");
}
}
class JpegReaderFactory:ImageReaderFactory
{
public override ImageReader getImageReader()
{
ImageReader ir = new JpegReader();
return ir;
}
}
class TiffReader:ImageReader
{
public override void read()
{
Console.WriteLine("读取TIFF图片中.....");
}
public override void finish()
{
Console.WriteLine("读取TIFF图片完成");
}
}
class TiffReaderFactory:ImageReaderFactory
{
public override ImageReader getImageReader()
{
ImageReader ir = new TiffReader();
return ir;
}
}
class Program
{
static void Main(string[] args)
{
ImageReaderFactory irf = null;
Console.WriteLine("请输入要读取的图片类型:");
string type = Console.ReadLine();
switch (type.ToLower())
{
case "jpeg": irf=new JpegReaderFactory(); break;
case "gif": irf = new GifReaderFactory(); break;
case "tiff": irf = new TiffReaderFactory(); break;
}
if (irf!=null)
{
irf.getImageReader().read();
irf.getImageReader().finish();
}
else
{
Console.WriteLine("请输入正确的图片类型!");
}
Console.ReadKey();
}
}
运行结果如下:
链接:https://pan.baidu.com/s/1uIEJUDHa2tJsh6WEiNqVDQ
提取码:tut2