sponsored links

C# 六十、设计模式:工厂模式

工厂模式:用于封装某些类的对象的创建

当对应一些接口或抽象类时,可以接收子类的对象,但不能直接创建实例,而是通过创建对应的工厂类,实现操作不同子对象的创建,工厂可以根据用户的不同选择返回若干个不同类的对象。

代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test_CSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("输入第一个数字:");
            int a = int.Parse(Console.ReadLine());
            Console.WriteLine("输入运算符:");
            string b = Console.ReadLine();
            Console.WriteLine("输入第二个数字:");
            int c = int.Parse(Console.ReadLine());
            Calculator calc = Factory.Count(b);
            Console.WriteLine("结果:");
            calc.Compute(a, c);

            Console.ReadKey();
        }
    }

    /// <summary>
    /// 父类:包含抽象方法——用于计算
    /// </summary>
    public abstract class Calculator
    {
        /// <summary>
        /// 抽象方法:用于计算
        /// </summary>
        /// <param name="a">计算的第一个数字</param>
        /// <param name="b">计算的第二个数字</param>
        public abstract void Compute(int a, int b);
    }

    /// <summary>
    /// 子类:加法
    /// </summary>
    public class Addition : Calculator
    {
        /// <summary>
        /// 改写计算方法用于两数相加
        /// </summary>
        public override void Compute(int a, int b)
        {
            Console.WriteLine(a + b);
        }
    }

    /// <summary>
    /// 子类:减法
    /// </summary>
    public class Subtraction : Calculator
    {
        /// <summary>
        /// 改写计算方法用于两数相减
        /// </summary>
        public override void Compute(int a, int b)
        {
            Console.WriteLine(a - b);
        }
    }

    /// <summary>
    /// 子类:乘法
    /// </summary>
    public class Multiplication : Calculator
    {
        /// <summary>
        /// 改写计算方法用于两数相乘
        /// </summary>
        public override void Compute(int a, int b)
        {
            Console.WriteLine(a * b);
        }
    }

    /// <summary>
    /// 子类:除法
    /// </summary>
    public class DivisionMethod : Calculator
    {
        /// <summary>
        /// 改写计算方法用于两数相除
        /// </summary>
        public override void Compute(int a, int b)
        {
            Console.WriteLine(a / b);
        }
    }

    /// <summary>
    /// 类:实现操作不同子对象的创建
    /// </summary>
    public class Factory
    {
        /// <summary>
        /// 方法:用于创建不同子对象
        /// </summary>
        /// <param name="name">运算符</param>
        /// <returns>子对象</returns>
        public static Calculator Count(string name)
        {
            Calculator cal = null;

            switch (name)
            {
                case "+": cal = new Addition(); break;
                case "-": cal = new Subtraction(); break;
                case "*": cal = new Multiplication(); break;
                case "/": cal = new DivisionMethod(); break;
            }
            return cal;
        }
    }
}

--->
输入第一个数字:
9
输入运算符:
/
输入第二个数字:
3
结果:
3
Tags: