高效优雅,代码之美,品味其中
satng@qq.com http://www.cnblogs.com/satng同步更新
class Program
{
static void Main(string[] args)
{
CobSat co;
co = PabFactoty.CreateOp("a");//类的静态函数直接用类名引用。
co.InuA = 5;
co.InuB = 10;
Console.Write(co.GetResutl().ToString());
//工厂模式点评
//1.类的静态函数------直接用类名引用就好了。类的静态构造函数不能有返回值。不能有修饰符(静态构造函数是在类初始化由
//编译器(CLR)自动调用的,一般用来初始化静态变量,且只能有一个),
//2.类的构造函数------不能有反回值,通过public priavert protected 来限定类的NEW
//3.工厂模式----是解决类的New问题的一种设计模式(创建型) 封装一类相关变化的类型 通过工厂来决定调用那一个
//4.抽象类----抽象类不能有实例。它是一个类型。可以有方法的实现,也可以不实现。继承类里可以实现里面的方法,也可以不实现。
//5.类型转换问题。苹果可以是水果,但水果不是苹果,子类可以转成基类,基类不能转成子类,这里的转换都是隐式转换。
//6.工厂模式的功能:在工厂模式中,封装了一些类的,(面向对象的编程,并不是类越多直好,类的划分是为了封装,
//但是分类的基础是抽象,具有相同属性的和功能的对象的抽象集合才是类)
///说到底,工厂模式只能解决类的创建问题
}
}
//class Uintily
//{
// public int PaFactory()
// {
// //工产模式调用
// CobSat ca;
// ca=new PabFactoty
// }
//}
//*************************
//*
//* ///简单工产模式
//*
//*************************
/// <summary>
/// 工厂方法基类
/// </summary>
public abstract class CobSat
{
public int InuA { set; get; }
public int InuB { set; get; }
public virtual int GetResutl()
{
int result = 0;
return result;
}
}
/// <summary>
/// 具体的方法类-----加法
/// </summary>
public class Suba:CobSat
{
public override int GetResutl()
{
return InuA + InuB;
}
}
/// <summary>
/// 具体的方法类-----乘法
/// </summary>
public class Subb : CobSat
{
public override int GetResutl()
{
return InuA * InuB;
}
}
/// <summary>
/// 抽象工厂类
/// </summary>
public class PabFactoty
{
public PabFactoty()
{
}
public static CobSat CreateOp(string op)
{
CobSat co = null;
if (op=="a")
{
co=new Suba();
}
else
{
co = new Subb();
}
return co;
}
}
有一点我们要注意的是,New是很消耗资源的,下一节,策略模式