工厂方法模式


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

定义:定义一个创建对象的接口,但由子类决定需要实例化那一个类。(工厂模式是我们常用的实例化对象模式了,是用工厂方法代替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();
        }
    }
    /// <summary>
    /// 形状 接口
    /// </summary>
    public interface shape
    {
        void draw();
    }
    /// <summary>
    /// 矩形
    /// </summary>
    public class Rectangle : shape
    {
        public void draw()
        {
            Console.WriteLine("矩形实现形状的接口方法draw()。");
        }
    }
    /// <summary>
    /// 正方形
    /// </summary>
    public class Square : shape
    {
        public void draw()
        {
            Console.WriteLine("正方形实现形状的接口方法draw()。");
        }
    }/// <summary>
     /// 圆形
     /// </summary>
    public class Circle : shape
    {
        public void draw()
        {
            Console.WriteLine("圆形实现形状的接口方法draw()。");
        }
    }
    /// <summary>
    /// 枚举 形状类型
    /// </summary>
    public enum ShapeType
    {
        Rectangle,
        Square,
        Circle
    }
    /// <summary>
    /// 形状工厂
    /// </summary>
    public class ShapeFactory
    {
        /// <summary>
        /// 通过参数决定创建的形状类型
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        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();
            }
        }
    }
}

结果

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

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

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐