前言:
终于开始设计模式了,感觉他们挺好玩的,让我对编程也有了更深的认识。
简单工厂模式:
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
下面通过例子进行讲解
机器人做饭,输入需要的食品,然后显示制作完成。
public class Cook { public static string Make(string name) { string result = ""; switch (name) { case "面条": result = "面条做好了"; break; case "米饭": result = "米饭做好了"; break; } return result; } }
上边的代码就是Cook类,客户通过Make方法就可以进行米饭或者面条的制作。
优点:封装性,是的客户不用关心内部的实现过程,只需要方法就可以得到想要的食品。
缺点:不灵活,如果需要制作其他的食品,就需要改类里边的代码,比较繁琐,可能影响别的功能代码。
改进版:
public class Cook { private string _number1 = "1"; //需要制作的食品数量 public string number1 { get { return _number1; } set { _number1 = value; } } public virtual string Make(string a) { String result = ""; return result; } } class MianTiao : Cook { public override string Make(string a ) { number1 = a; string result = "面条制作好了,请享用! "; return result+number1+"份"; } }
class MiFan : Cook { public override string Make(string a ) { number1 = a; string result = "米饭制作好了,请享用! "; return result+number1+"份"; } }
class Program { static void Main(string[] args) { MianTiao Num2 = new MianTiao(); string Num3 = ""; Console.WriteLine("欢迎光临机器人之家,我可以为您做 米饭 和 面条"); Console.WriteLine("请输入需要制作的份数"); Num3 = Console.ReadLine(); Console.WriteLine("正在制作中 "); Console.WriteLine(Num2.Make(Num3)); Console.ReadKey(); } } }
上边代码将 Cook类中的 面条和米饭的制作分别提出来各自成为一个类,然后继承Cook类,重写了 Make这个方法,使得添加或修改某一个功能不影响其他的功能,降低了耦合度。
优点:继承性,降低耦合度,降低修改代码出错的可能性
缺点:系统自己无法判别需要哪个功能模块进行执行。
简单工厂模式:
namespace 简单工厂模式 { public class Cook { private string _number1 = "1"; //需要制作的食品数量 public string number1 { get { return _number1; } set { _number1 = value; } } public virtual string Make(string a) { String result = ""; return result; } } class MianTiao : Cook { public override string Make(string a ) { number1 = a; string result = "面条制作好了,请享用! "; return result+number1+"份"; } } class MiFan : Cook { public override string Make(string a) { number1 = a; string result = "米饭制作好了,请享用! "; return result + number1 + "份"; } } public class CookFactory { public static Cook createCook(string name) { Cook ck = null; switch (name) { case "米饭": ck = new MianTiao(); break; case "面条": ck = new MianTiao(); break; } return ck; } } class Program { static void Main(string[] args) { string result; string num =""; Cook ck1; Console.WriteLine("输入要做的饭:米饭 或者 面条"); ck1 = CookFactory.createCook(Console.ReadLine()); Console.WriteLine("输入需要制作的份数"); num = Console.ReadLine(); result = ck1.Make(num); Console.WriteLine(result); Console.ReadKey(); } } }
上边就是简单工厂模式的一个例子,通过CookFactroy我们可以让用户选择需要实例化谁,这样使得我们在添加新功能变得很方便,只需要添加制作食品的子类就可以,使得 业务和界面分离。
优点:模块清晰化,分工明确,代码就实现最渐层意义上的“可维护”。
缺点,增加功能我们就要去添加一个新的类,同时我们需要在Factory中改动到switch里面的代码,耦合性很高.
总结:
简单工厂模式是我学的第一个设计模式,以前编写代码写一些功能的时候就没有这样想过,把他们各个功能写成子类,然后由工厂类选择去实例化,感觉自己以前自己编程都毫无技巧性或者可读性,现在只学了第一个就感觉神清气爽,我感觉我对编程更加有兴趣了。