设计模式 工厂

三种工厂模式:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 简单工厂练习
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             food a = gongchang.selectfood("cai1");
14             a.print();
15         }
16        
17     }
18     public interface food
19     {
20           void print();
21     }
22     public class  cai1:food
23     {
24         public  void print()
25         {
26             Console.WriteLine("hongshaoyu");
27         }
28     }
29     public class cai2 : food
30     {
31         public  void print()
32         {
33             Console.WriteLine("qiezi");
34         }
35     }
36     public class gongchang
37     {
38         public static food selectfood(string type)
39         {
40             if (type.Equals("cai1"))
41             {
42                 return new cai1();
43             }
44             else
45             {
46                 return new cai2();
47             }
48         }
49     }
50 }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//简单工厂总结:
//               1.创建具体事物的抽象类,创建不同的具体事物继承
//               2.创建抽象工厂类,创建不同的具体工厂继承
//               3.选择工厂的新实例。工厂选择具体事物的新实例
//               4.执行具体事物的方法。
//如果要扩展产品,要添加一个具体事物类和具体工厂类,缺点:单个工厂只创建单个产品
namespace 工厂方法模式
{
    class Program
    {

        static void Main(string[] args)
        {
            Factory a = new CreFactoryAodi();//大众工厂赋值给抽象工厂
            Factory d = new CreFactoryDazhong();//奥迪工厂赋值给抽象工厂
            car q = a.CreFactory();//执行奥迪工厂的方法,这个方法会选择new奥迪的对象,方法返回是奥迪具体事物类
            q.outcar();//执行奥迪具体事物类
            car w = d.CreFactory();//执行大众工厂的方法,这个方法会选择new大众的对象,方法返回是大众具体事物类
            w.outcar();//执行大众具体事物类
        }
    }
    public abstract class car//抽象汽车类
    {
        public abstract void outcar();
    }
    public class dazhong : car//具体大众子类
    {
        public override void outcar()
        {
            Console.WriteLine("生产一辆大众汽车");
        }
    }
    public class aodi : car//具体奥迪子类
    {
        public override void outcar()
        {
            Console.WriteLine("生产一辆奥迪汽车");
        }
    }
    public abstract class Factory//抽象工厂类
    {
        public abstract car CreFactory();
    }
    public class CreFactoryAodi: Factory//具体工厂类,选择aodi工厂
    {
        public override  car CreFactory()
        {
            return new aodi();
        }
    }
    public class CreFactoryDazhong : Factory//具体工厂类,选择dazhong工厂
    {
        public override car CreFactory()
        {
            return new dazhong();
        }
    }
}
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 抽象工厂
 8 {
 9     //工厂总结:
10     //               1.这里有抽象工厂,抽象产品1,抽象产品2
11     //               2.选择产地工厂,选择品牌,生产
12     //如果要扩展产地,要添加一个具体产地和产品1,产品2
13     class Program
14     {
15         static void Main(string[] args)
16         {
17             FA S = new shangqiFA();//得到具体工厂,选择工厂
18             dazhong ss= S.dazhongCar();//选择品牌
19             ss.outCar();//生产
20             aodi ss1 = S.aodiCar();
21             ss1.outCar();
22             FA Q = new yiqiFA();
23             dazhong QQ = Q.dazhongCar();
24             QQ.outCar();
25             aodi QQ1 = Q.aodiCar();
26             QQ1.outCar();
27 
28         }
29     }
30     public abstract class FA//抽象工厂
31     {
32         public abstract dazhong dazhongCar();
33         public abstract aodi aodiCar();
34     }
35     public abstract class dazhong//抽象大众
36     {
37         public abstract void outCar();
38     }
39     public abstract class aodi//抽象奥迪
40     {
41         public abstract void outCar();
42     }
43     public class shangqiDazhong : dazhong
44     {
45         public override void outCar()
46         {
47             Console.WriteLine("生产上海大众汽车");
48         }
49     }
50     public class yiqidazhong : dazhong
51     {
52         public override void outCar()
53         {
54             Console.WriteLine("生产一汽大众汽车");
55         }
56     }
57     public class yiqiaodi : aodi
58     {
59         public override void outCar()
60         {
61             Console.WriteLine("生产一汽奥迪汽车");
62         }
63     }
64     public class shangqiaodi : aodi
65     {
66         public override void outCar()
67         {
68             Console.WriteLine("生产上海奥迪汽车");
69         }
70     }
71 
72     public class shangqiFA : FA
73     {
74         public override dazhong dazhongCar()
75         {
76             return new shangqiDazhong();
77         }
78         public override aodi aodiCar()
79         {
80             return new shangqiaodi();
81         }
82 
83     }
84     public class yiqiFA : FA
85     {
86         public override dazhong dazhongCar()
87         {
88             return new yiqidazhong();
89         }
90         public override aodi aodiCar()
91         {
92             return new yiqiaodi();
93         }
94 
95     }
96 }

 工业硬 件实例

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

namespace 工厂方法
{
    /// <summary>
    /// 抽象硬件类
    /// </summary>
    public abstract class Dev
    {
        public  bool IsConnect { get; set; }
      //  public abstract bool ABC;//不能定义抽象属性,可以定义抽象方法
        public abstract void open();
        public abstract void operate();
        public abstract void close();
    }
    /// <summary>
    /// 扫码枪硬件类
    /// </summary>
    public class BarCodeGun:Dev
    {
      
       
        public override void  open()
        {
            Console.WriteLine("打开了扫码枪的驱动");
            IsConnect = true;
        }
        public override void operate()
        {
            Console.WriteLine("扫码枪执行命令");
            
        }
        public override void close()
        {
            Console.WriteLine("关闭了扫码枪的驱动");
            IsConnect = false;
        }

    }
    /// <summary>
    /// 感应器硬件类
    /// </summary>
    public class Sensor : Dev
    {
       
        public override void open()
        {
            Console.WriteLine("打开了感应器的驱动");
            IsConnect = true;
        }
        public override void operate()
        {
            Console.WriteLine("感应器执行命令");
            
        }
        public override void close()
        {
            Console.WriteLine("关闭了感应器的驱动");
            IsConnect = false;
        }

    }
    /// <summary>
    /// 抽象创建类
    /// </summary>
    public abstract class FACreator
    {
        public abstract Dev Creator();
    }
    /// <summary>
    /// 扫码枪创建类
    /// </summary>
    public class CreatorBarCodeGun:FACreator
    {
        public override Dev Creator()
        {
            return new BarCodeGun();
        }
    }
    /// <summary>
    /// 感应器创建类
    /// </summary>
    public class CreatorSensor : FACreator
    {
        public override Dev Creator()
        {
            return new Sensor();
        }
    }
    //客户端调用
    internal class Program
    {
        static void Main(string[] args)
        {
            //1.实例化扫码枪创建类
            FACreator CB = new CreatorBarCodeGun();
            //2.创建 扫码枪实例返回
            Dev saoma =   CB.Creator();
            //执行扫码枪方法
            saoma.open();
            bool b = saoma.IsConnect;
            saoma.close();

            //同上的操作
          //  CreatorSensor CS = new CreatorSensor();//这个也是可以的,不过一般不这样用
           FACreator CS=new CreatorSensor();
            Dev ganying = CS.Creator();
            ganying.operate();
            bool BE = ganying.IsConnect;
            Console.ReadKey();

        }
    }
}

 

 
posted @ 2021-06-02 18:32  灰色淡季  阅读(53)  评论(0)    收藏  举报