设计模式-工厂方法模式
public interface IYunSuan { double getResult(int num1, int num2); } public class jia : IYunSuan { public double getResult(int num1, int num2) { return num1 + num2; } } public class jian : IYunSuan { public double getResult(int num1, int num2) { return num1-num2; } } public class cheng : IYunSuan { public double getResult(int num1, int num2) { return num1*num2; } } public class chu : IYunSuan { public double getResult(int num1, int num2) { if (num2 == 0) return 0; return num1/num2; } } ////////////// //简单工厂,专门生产对象 public static IYunSuan createYunSuanObj(string type) { switch (type) { case "+":return new jia(); case "-": return new jian(); case "*": return new cheng(); case "/": return new chu(); } return null; } //工厂方法模式,把简单工厂分解 public interface IFactory { IYunSuan createYunSuanObj(); } public class jiaFactory : IFactory { public IYunSuan createYunSuanObj() { return new jia(); } } public class jianFactory : IFactory { public IYunSuan createYunSuanObj() { return new jian(); } } public class chengFactory : IFactory { public IYunSuan createYunSuanObj() { return new cheng(); } } public class chuFactory : IFactory { public IYunSuan createYunSuanObj() { return new chu(); } } 前端: static void Main(string[] args) { //简单工厂模式 //var jia=simpleFactory.createYunSuanObj("+"); //var result=jia.getResult(1,2); //Console.WriteLine(result); //Console.ReadLine(); //工厂方法模式 IFactory factory = new jiaFactory(); var jia=factory.createYunSuanObj(); var result=jia.getResult(1, 2); Console.WriteLine(result); Console.ReadLine(); }
总结:定义一个创建对象的接口,让子类决定实例化哪个类,工厂模式使得一个类的实例化延迟到其子类。是基于简单工厂的扩展模式,解耦了简单工厂的工厂类,符合了几大原则
优点:解耦
缺点:代码量增加N多,让人蛋疼。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。