设计模式之工厂模式

工厂模式

属于创建型模式,提供了一个创建对象的方式

主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
包括:简单工厂模式(普通简单工厂,多方法简单工厂,静态方法简单工厂),工厂模式,抽象工厂模式,

三者的不同:

  1. 首先,三者的创建对象是不相同的
  2. 其次,三者的定义变量不同。
  3. 最后,三者的接口数量不同

总结:

简单工厂模式:1个抽象产品类,1个具体工厂类.,1个产品
工厂方法模式:1个抽象产品类,1个抽象工厂类,1个产品
抽象工厂模式:1个抽象产品类,1个抽象工厂类,多个产品

普通简单工厂

public interface Class1
    {
       void GetResult(string num1, string num2);
        //void GetSUm();
    }
class OrdinarySimpleFactory
    {
        static void Main(string[] args)
        {
            OperationFactory fa = new OperationFactory();
            Console.WriteLine("开始");
            //先输入第一个数
            Console.WriteLine("请输入运营商:");
            string num1 = Console.ReadLine();
            Console.WriteLine($"输入的运营商是:{num1}");
            //int number1 = CheckNum(num1);
            //先输入第二个数
            Console.WriteLine("请输入手机号:");
            string num2 = Console.ReadLine();
            Console.WriteLine($"输入的手机号是:{num2}");

            Console.WriteLine("请输入发送信息:");
            string num3 = Console.ReadLine();
            Console.WriteLine($"输入的发送信息是:{num3}");

            Class1 qq = fa.GetResult(num1);
            qq.GetResult(num2, num3);
            Console.ReadLine();
        }


    }
    public class OperationFactory
    {
        public Class1 GetResult(string num1)
        {
            Class1 res = null;
            switch (num1)
            {
                case "移动":
                    res=new AA();
                    break;
                case "联通":
                    res = new BB();
                    break;
                case "电信":
                    res = new DD();
                    break;

                default:
                    
                    return null;
            }
            return res;
        }

        
    }

    public class AA : Class1
    {
        public void GetResult(string num1, string num2)
        {
            Console.WriteLine($"手机号:{num1},信息{num2}");
        }
    }
    public class BB : Class1
    {
        public void GetResult(string num1, string num2)
        {
            Console.WriteLine($"手机号:{num1},信息{num2}");
        }
    }
    public class DD : Class1
    {
        public void GetResult(string num1, string num2)
        {
            Console.WriteLine($"手机号:{num1},信息{num2}");
        }
    }
多方法简单工厂
public class ManyMethodSimpleFactory
    {
        public static void Main(string[] args)
        {
            ManyMethodOperationFactory fa = new ManyMethodOperationFactory();
            string num2 = "12121";
            string num3 = "进口粮食局考了多少分";
            ManyMethodOperationFactory.GetResult().GetResult(num2, num3);
            fa.GetResult1().GetResult(num2, num3);
            //qq;
            Console.ReadLine();
        }
    }

    public class ManyMethodOperationFactory
    {
        //静态方法简单工厂
        public Class1 GetResult()
        {
            return new HPMouse();
        }

        public Class1 GetResult1()
        {
            return new LenoveMouse();
        }
    }

    public class HPMouse : Class1
    {
        public void GetResult(string num1, string num2)
        {
            Console.WriteLine($"方法一手机号:{num1},信息{num2}");
        }
    }
    public class LenoveMouse : Class1
    {
        public void GetResult(string num1, string num2)
        {
            Console.WriteLine($"方法二手机号:{num1},信息{num2}");
        }
    }
静态方法简单工厂
 public class ManyMethodSimpleFactory
    {
        public static void Main(string[] args)
        {
            ManyMethodOperationFactory fa = new ManyMethodOperationFactory();
            string num2 = "12121";
            string num3 = "进口粮食局考了多少分";
            ManyMethodOperationFactory.GetResult().GetResult(num2, num3);
            fa.GetResult1().GetResult(num2, num3);
            //qq;
            Console.ReadLine();
        }
    }

    public class ManyMethodOperationFactory
    {
        //静态方法简单工厂
        public static Class1 GetResult()
        {
            return new HPMouse();
        }

        public Class1 GetResult1()
        {
            return new LenoveMouse();
        }
    }

    public class HPMouse : Class1
    {
        public void GetResult(string num1, string num2)
        {
            Console.WriteLine($"方法一手机号:{num1},信息{num2}");
        }
    }
    public class LenoveMouse : Class1
    {
        public void GetResult(string num1, string num2)
        {
            Console.WriteLine($"方法二手机号:{num1},信息{num2}");
        }
    }
   

工厂模式

public class 工厂模式
    {
        public static void Main(string[] args)
        {
            DellComplexFactory fa = new DellComplexFactory();
           fa.CreateMouse().Print();

            HpComplexFactory hp = new HpComplexFactory();
            hp.CreateMouse().Print();
            //qq;
            Console.ReadLine();
        }
    }
    //鼠标工厂
    public abstract class ComplexFactory
    {
        public abstract Class2 CreateMouse();
    }

    public class DellComplexFactory : ComplexFactory
    {
        public override Class2 CreateMouse()
        {
           return new DellMouse();
        }

        //
    }

    public class HpComplexFactory : ComplexFactory
    {
        public override Class2 CreateMouse()
        {
            return new HpMouse();
        }
        ///
    }
    //其他厂家的鼠标
    public class XXXXX : ComplexFactory
    {
        public override Class2 CreateMouse()
        {
            throw new NotImplementedException();
        }
    }

public abstract class Class2
    {
      public abstract void Print();
        //public void Prin();
        //void GetSUm();
    }

    public class DellMouse : Class2
    {
        public override void Print()
        {
            Console.WriteLine("生产了一个Dell鼠标!");
        }
    }

    public class HpMouse : Class2
    {
        public override void Print()
        {
            Console.WriteLine("生产了一个Hp鼠标!");
        }
    }

    public class XXxMouse : Class2
    {
        public override void Print()
        {
            Console.WriteLine("生产了一个XXx鼠标!");
        }
    }

抽象工厂模式:工厂模式看作是抽象工厂的一个特例。

public abstract class Keybo
    {
        public abstract void Print();
    }

    public class DellKeybo : Keybo
    {
        public override void Print()
        {
            Console.WriteLine("生产了一个Dell鼠标!");
        }
    }

public abstract class ComplexFactory
    {
        public abstract Class2 CreateMouse();
        public abstract Keybo CreateKeybo();
    }

public class DellComplexFactory : ComplexFactory
    {
        public override Class2 CreateMouse()
        {
           return new DellMouse();
        }

        public override Keybo CreateKeybo()
        {
            return new DellKeybo();
        }

        //
    }
public class 抽象工厂模式
    {
        public static void Main(string[] args)
        {
            //戴尔
            DellComplexFactory fa = new DellComplexFactory();
           fa.CreateMouse().Print();//鼠标
           fa.CreateKeybo().Print();//键盘

            HpComplexFactory hp = new HpComplexFactory();
            hp.CreateMouse().Print();
            //qq;
            Console.ReadLine();
        }
    }
posted @ 2022-12-14 09:27  悟自省  阅读(27)  评论(0编辑  收藏  举报