简单工厂模式 工厂方法负责生产,操作简单但不符合OCP原则
class Program
{
static void Main(string[] args)
{
Calculator c = CalculatorFactory.CalculatorCreator("add");
c.A = 1;
c.B = 2;
Console.WriteLine(c.cal());
}
}
class CalculatorFactory
{
public static Calculator CalculatorCreator(string type)
{
switch (type.ToLower())
{
case "add": return new Add();
case "sub": return new Sub();
default: return new Add();
}
}
}
abstract class Calculator
{
double a, b;
public double B
{
get { return b; }
set { b = value; }
}
public double A
{
get { return a; }
set { a = value; }
}
public abstract double cal();
}
class Add : Calculator
{
public override double cal()
{
return (A + B);
}
}
class Sub : Calculator
{
public override double cal()
{
return (A - B);
}
}
工厂方法模式 配合反射可以动态生产了
class Program
{
static void Main(string[] args)
{
CalculatorFactory cf = new AddFactory();
Calculator c = cf.CalculatorCreator();
c.A = 1;
c.B = 2;
Console.WriteLine(c.cal());
}
}
interface CalculatorFactory
{
Calculator CalculatorCreator();
}
class AddFactory : CalculatorFactory
{
public Calculator CalculatorCreator()
{
return new Add();
}
}
class SubFactory : CalculatorFactory
{
public Calculator CalculatorCreator()
{
return new Sub();
}
}
abstract class Calculator
{
double a, b;
public double B
{
get { return b; }
set { b = value; }
}
public double A
{
get { return a; }
set { a = value; }
}
public abstract double cal();
}
class Add : Calculator
{
public override double cal()
{
return (A + B);
}
}
class Sub : Calculator
{
public override double cal()
{
return (A - B);
}
}
反射
<appSettings>
<add key="FactoryMethod" value="AddFactory" />
</appSettings>
string typeName = "ConsoleApplication1." + ConfigurationSettings.AppSettings["FactoryMethod"];
CalculatorFactory cf = (CalculatorFactory)Assembly.Load("ConsoleApplication1").CreateInstance(typeName);
Calculator c = cf.CalculatorCreator();
c.A = 1;
c.B = 2;
Console.WriteLine(c.cal());