1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace DesignPattern.CreationalPatern
8 {
9 #region 简单工厂模式要点
10
11 //定义:工厂类通过客户端传入的参数来创建产品对象
12
13 //优点:
14 //1.封装变化,将代码变化的部分移到工厂类
15 //2.解除了对具体对象的依赖,将创建的责任转交给工厂,减轻代码耦合
16 //3.利于代码的复用
17
18 //缺点:
19 //1.违背开放封闭原则,扩展新的产品对象需要修改工厂类
20 //2.创建产品对象的逻辑都在工厂类中,工厂类若出异常会影响整个系统
21
22 //使用场景:
23 //1.产品对象类型少且稳定,不会轻易修改的
24 //2.客户端提供参数切不关心对象创建过程
25
26 #endregion
27
28
29 //步骤:1.根据客户端传入参数创建具体对象,返回该具体对象的抽象父类
30 public class SimpleFactoryPattern
31 {
32 public static Season GetSeason(SeasonName seasonName)
33 {
34 Season _season = null;
35 switch (seasonName)
36 {
37 case SeasonName.SPRING:
38 break;
39 case SeasonName.SUMMER:
40 _season = new Summer();
41 break;
42 case SeasonName.FALL:
43 break;
44 case SeasonName.WINTER:
45 _season = new Winter();
46 break;
47 default:
48 break;
49 }
50
51 return _season;
52 }
53 }
54
55 public abstract class Season
56 {
57 public abstract void Pirnt();
58 }
59
60 public class Spring : Season
61 {
62 public override void Pirnt()
63 {
64 Console.WriteLine("春天");
65 }
66 }
67
68
69 public class Summer : Season
70 {
71 public override void Pirnt()
72 {
73 Console.WriteLine("夏天");
74 }
75 }
76 public class Fall : Season
77 {
78 public override void Pirnt()
79 {
80 Console.WriteLine("秋天");
81 }
82 }
83
84 public class Winter : Season
85 {
86 public override void Pirnt()
87 {
88 Console.WriteLine("冬天");
89 }
90 }
91
92 public enum SeasonName
93 {
94 SPRING,
95 SUMMER,
96 FALL,
97 WINTER
98 }
99 }