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多,让人蛋疼。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。