一、简单工厂模式 : 面向对象 特性 封装
计算器实例
(利用面向对象封装的特性,将业务的逻辑与界面的逻辑分开,降低耦合度)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Net; 7 using System.Net.Sockets; 8 9 10 namespace Test 11 { 12 //运算类() 13 public class Operation 14 { 15 public static double GetResult(double numberA, double numberB, string operate) 16 { 17 double result = 0d; 18 switch (operate) 19 { 20 case "+": 21 result = numberA + numberB; 22 break; 23 case "-": 24 result = numberA - numberB; 25 break; 26 case "*": 27 result = numberA * numberB; 28 break; 29 case "/": 30 result = numberA / numberB; 31 break; 32 default: 33 break; 34 } 35 return result; 36 } 37 } 38 39 public class Program 40 { 41 static void Main(string[] args) 42 { 43 try 44 { 45 Console.Write("请输入数字A:"); 46 string strNumberA = Console.ReadLine(); 47 Console.Write("请选择运算符号(+ 、- 、*、/、):"); 48 string strOperate = Console.ReadLine(); 49 Console.Write("请输入数字B:"); 50 string strNumberB = Console.ReadLine(); 51 string strResult = ""; 52 strResult = Convert.ToString(Operation.GetResult(Convert.ToDouble(strNumberA), 53 Convert.ToDouble(strNumberB), strOperate)); 54 Console.WriteLine("结果是:" + strResult); 55 Console.ReadLine(); 56 } 57 catch (Exception ex) 58 { 59 Console.WriteLine("您输入的有错:" + ex.Message); 60 } 61 } 62 } 63 }
///////////////////////紧耦合 vs 松耦合
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.Net.Sockets; namespace Test { //运算类 public class Operation { private double _numberA = 0; private double _numberB = 0; public double NumberA { get { return _numberA;} set { _numberA = value; } } public double NumberB { get { return _numberB; } set { _numberB = value; } } public virtual double GetResult() { double result = 0; return result; } } //加减乘除类 class OperationAdd:Operation { public override double GetResult() { double result = 0; result = NumberA + NumberB; return result; } } //减法 class OperationSub : Operation { public override double GetResult() { double result = 0; result = NumberA - NumberB; return result; } } //乘法 class OperationMul : Operation { public override double GetResult() { double result = 0; result = NumberA * NumberB; return result; } } //除法 class OperationDiv : Operation { public override double GetResult() { double result = 0; if (NumberB == 0) throw new Exception("除数不能为0"); result = NumberA / NumberB; return result; } } //简单工厂 public class OperationFactory { public static Operation createOperate(string operate) { Operation oper = null; switch (operate) { case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; case "*": oper = new OperationMul(); break; case "/": oper = new OperationDiv(); break; } return oper; } } public class Program { static void Main(string[] args) { Console.Write("请选择运算符号(+ 、- 、*、/、):"); string strOperate = Console.ReadLine(); Operation oper; oper = OperationFactory.createOperate(strOperate); Console.Write("请输入数字A:"); oper.NumberA = Convert.ToDouble(Console.ReadLine()); Console.Write("请输入数字B:"); oper.NumberB = Convert.ToDouble(Console.ReadLine()); double result = oper.GetResult(); Console.WriteLine("结果是:" + result); Console.ReadLine(); } } }
Unity3d师兄