C#设计模式——工厂方法模式(Factory Method Pattern)

工厂方法模式


工厂方法模式->创建型设计模式

定义:定义一个创建对象的接口,但由子类决定需要实例化那一个类。(工厂模式是我们常用的实例化对象模式了,是用工厂方法代替new 操作的一种模式,简单工厂的特点就是“简单粗暴”,通过一个含参的工厂方法,我们可以实例化任何产品类。)

代码

namespace ConsoleApp1
{
    public class Program
    {
        static void Main(String[] args)
        {
            Console.WriteLine("选择形状绘制:");
            shape sh1 = ShapeFactory.GetShape(ShapeType.Square);
            sh1.draw();
            shape sh2 = ShapeFactory.GetShape(ShapeType.Circle);
            sh2.draw();
            shape sh3 = ShapeFactory.GetShape(ShapeType.Rectangle);
            sh3.draw();
            Console.Read();
        }
    }
    /// 
    /// 形状 接口
    /// 
    public interface shape
    {
        void draw();
    }
    /// 
    /// 矩形
    /// 
    public class Rectangle : shape
    {
        public void draw()
        {
            Console.WriteLine("矩形实现形状的接口方法draw()。");
        }
    }
    /// 
    /// 正方形
    /// 
    public class Square : shape
    {
        public void draw()
        {
            Console.WriteLine("正方形实现形状的接口方法draw()。");
        }
    }/// 
     /// 圆形
     /// 
    public class Circle : shape
    {
        public void draw()
        {
            Console.WriteLine("圆形实现形状的接口方法draw()。");
        }
    }
    /// 
    /// 枚举 形状类型
    /// 
    public enum ShapeType
    {
        Rectangle,
        Square,
        Circle
    }
    /// 
    /// 形状工厂
    /// 
    public class ShapeFactory
    {
        /// 
        /// 通过参数决定创建的形状类型
        /// 
        /// 
        /// 
        public static shape GetShape(ShapeType type)
        {
            switch (type)
            {
                case ShapeType.Rectangle:
                    return new Rectangle();
                case ShapeType.Square:
                    return new Square();
                case ShapeType.Circle:
                    return new Circle();
                default:
                    return new Square();
            }
        }
    }
}

结果

C#设计模式——工厂方法模式(Factory Method Pattern)_第1张图片

特点:工厂方法模式中,具体的工厂只是生产具体的某一个产品。而抽象工厂模式的具体的工厂可以生产族产品(例如奔驰轿车、奔驰SUV、奔驰MPV)。

区别:抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一种产品的继承结构,而抽象工厂模式需要面对多个产品的继承结构。

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