设计模式题目-工厂方法模式(Factory Method)

设计一个程序来读取多种不同存储格式的图片,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF格式图片读取器(GifReader)用于读取GIF格式的图片,JPEG格式图片读取器(JpegReader)用于读取JPEG格式的图片,Tiff格式图片读取器(TiffReader)用于读取Tiff格式的图片。图片读取器对象通过图片读取器工厂(ImageReaderFactory)来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory、JpegReaderFactory和TiffReaderFactory用于创建具体的图片读取器对象。请使用工厂方法模式实现该程序的设计,并使用UML画出该模式的类图。

首先是UML类图,如下图所示:

设计模式题目-工厂方法模式(Factory Method)_第1张图片

代码如下:


    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

你可能感兴趣的:(设计模式,设计模式,工厂方法模式)