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

本文介绍了工厂方法模式,它是创建型设计模式的一种,通过定义创建对象的接口,由子类决定实例化哪个类。文中给出了一个简单的代码示例,展示了如何使用工厂方法创建不同形状的对象。同时,文章对比了工厂方法模式和抽象工厂模式的区别,指出工厂方法关注单个产品的继承结构,而抽象工厂则涉及一族产品的生产。
摘要由CSDN通过智能技术生成

工厂方法模式


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

定义:定义一个创建对象的接口,但由子类决定需要实例化那一个类。(工厂模式是我们常用的实例化对象模式了,是用工厂方法代替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)。

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值