设计模式三种工厂模式

  • 简单工厂模式
    例:图形工厂
    使用简单工厂模式设计一个可以创建不同几何形状(Shape)的绘图工具类,如可创建圆形(Circle)、矩形(Rectangle)和三角形(Triangle)对象,每个几何图形均具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,抛出一个UnsupportedShapeException异常,设计类图并编程实现。
    类图:
    设计模式三种工厂模式_第1张图片
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 设计模式1
{
    class Program
    {
        static void Main(string[] args)
        {
           Shape test = null;

            test = ShapeFactory.getshape("Circle");
            test.draw();
            test.erase();
            test = ShapeFactory.getshape("Rectangle");
            test.draw();
            test.erase();
            test = ShapeFactory.getshape("Triangle");
            test.draw();
            test.erase();
            test = ShapeFactory.getshape("other");
            test.draw();
            test.erase();        }
    }
        abstract class Shape//图形工厂
        {
            public abstract void draw();

            public abstract void erase();

        }
            class Circle:Shape
            {
                public override void draw()
                {
                    Console.WriteLine("创建新的 Circle");
                }
                public override void erase()
                {
                    Console.WriteLine("擦除 Circle");
                }
            }
            class Rectangle : Shape
            {
                public override void draw()
                {
                    Console.WriteLine("创建新的 Rectangle");
                }
                public override void erase()
                {
                    Console.WriteLine("擦除 Rectangle");
                }
            }
            class Triangle : Shape
            {
                public override void draw()
                {
                    Console.WriteLine("创建新的 Triangle");
                }
                public override void erase()
                {
                    Console.WriteLine("擦除 Triangle");
                }
            }
    class ShapeFactory//图形工厂类
    {
        public static Shape getshape(string agr)
        {
            Shape s = null;
            if(agr.Equals("Circle"))
            {
                s = new Circle();
                Console.WriteLine("初始化 Circle");
            }
            else if (agr.Equals("Rectangle"))
            {
                s = new Rectangle();
                Console.WriteLine("初始化 Rectangle");
            }
            else if (agr.Equals("Triangle"))
            {
                s = new Triangle();
                Console.WriteLine("初始化 Triangle");
            }
            else
            {
                throw new UnsupportedShapeException("type is not found");
            }
            return s;
        }
    }
    class UnsupportedShapeException:ApplicationException
    {
        public UnsupportedShapeException():base()
        {

        }
        public UnsupportedShapeException(string message)
            : base(message)
        {

        }
        public UnsupportedShapeException(string message,Exception innerException)
            : base(message,innerException)
        {
        }
    }
}
  • 工厂方法模式
    例:图片读取器
    某系统设计一个图片读取器(ImageReader),用来读取各种不同类型的图片格式,例如GIF图片读取器(GifReader)用于读取GIF格式的图片、 JPG图片读取器(JpgReader)用于读取JPG格式的图片,现使用工厂方法模式设计该系统类图并编程实现。
    类图:
    设计模式三种工厂模式_第2张图片
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式上机1图片读取器
{
    class Program
    {
        static void Main(string[] args)
        {
            Facatory facatory = new JpgFacatory();
             facatory.createReader();
            Facatory facatory1 = new GifFacatory();
            facatory1.createReader();
            Console.ReadKey();
        }
    }
    public interface ImageReader//抽象图像读取器
    {
         void imageRead();
    }
    public interface Facatory//抽象工厂接口
    {
         void createReader();
    }
    class GifReader : ImageReader
    {
        public void imageRead()
        {
            Console.WriteLine("读取Gif图片类");
        }
    }
    class JpgReader : ImageReader
    {
        public void imageRead()
        {
            Console.WriteLine("read jpg pictures");
        }
    }
    class JpgFacatory : Facatory//具体工厂类
    {
        public void  createReader()
        {
            ImageReader s = null;

            s = new JpgReader();
            s.imageRead();
            Console.WriteLine("create JpgReader");
        }
    }
        class GifFacatory : Facatory//具体工厂类
        {
            public void createReader()
            {
                ImageReader s = null;

                s = new GifReader();
                s.imageRead();
                Console.WriteLine("create gifreader");
            }
        }
}
  • 抽象工厂模式
    例:电器工厂
    一个电器工厂可以产生多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机、TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用抽象工厂模式模拟该场景,设计类图并编程实现
    设计模式三种工厂模式_第3张图片
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 设计模式电器工厂
{
    class Program
    {
        static void Main(string[] args)
        {
            Factory haierfactory;
            haierfactory = new HaierFactory();
            haierfactory.CreateProduct();
            Factory tclfactory;
            tclfactory = new TCLFactory();
            tclfactory.CreateProduct();
            Console.ReadKey();
        }
    }
   public interface TV {
        void CreateTV();
   }
//HaierTV类:
    public class HaierTV : TV
    {
    public void CreateTV() {
        Console.WriteLine("创建海尔TV");    
    }
}
//TCLTV类:
    public class TCLTV : TV
    {
    public void CreateTV() {
        Console.WriteLine("生产TCL电视机");  
    }
}
    public interface Air//抽象空调
    {
         void CreateAir();
    }
//HaierAir类:
    public class HaierAir : Air
    {
    public void CreateAir() {
        Console.WriteLine("生产海尔空调");
    }
}
//TCLAir类:
public class TCLAir : Air{
    public void CreateAir() {
        Console.WriteLine("生产TCL空调");   
    }
}
//TV接口:

    interface Factory//抽象工厂类
    {
         void CreateProduct();
    }
    //HaierFactory类:
public class HaierFactory : Factory{
    public void CreateProduct() {
        Air test1;
        test1=new HaierAir();
        test1.CreateAir();
        TV test2;
        test2=new HaierTV();
        test2.CreateTV();   
    }
}
//TCLFactory类:
    public class TCLFactory : Factory
    {
    public void CreateProduct() {
        Air test1;
        test1=(Air) new TCLAir();
        test1.CreateAir();
        TV test2;
        test2=new TCLTV();
        test2.CreateTV();
    }
}
}

有错误的地方还请指正!

你可能感兴趣的:(c#,设计模式)