工厂模式有三种,简单、方法‘抽象三种,我理解为一维,二维,三维的层面,主要就是返回方法,不用自己手动new,而是依靠返回。
就不贴代码了。
工厂模式嘛,就是你想要什么对象,不用通过自己手动new,而是通知“工厂”,让他帮你制作,简单来说就是工厂方法return给你一个对象。
一维二维三维的层面就是简单工厂、方法工厂、抽象工厂三种。
1、简单工厂就是一对一的模式。Pizza是事先定义好的类,然后通过GetPizza方法,返回一个对象。
public Pizza GetPizza()
{
return new Pizza();
}
2、方法工厂就是一对多的模式。Pizza是基类,MeatPizza和VegetablePizza和NormalPizza是Pizza的派生类
public Pizza GetPizza(string PizzaName)
{
if (PizzaName == "MeatPizza")
{
return new MeatPizza();
}
else if (PizzaName == "VegetablePizza")
{
return new VegetablePizza();
}
else
{
return new NormalPizza();
}
}
3、抽象工厂就是多对多的模式。
public static void Main(string[] args)
{
PizzaStore cnPizzaStore = new CNPizzaStore();
Pizza pizza = cnPizzaStore.GetPizza("MeatPizza");
PizzaStore jpPizzaStore = new JPPizzaStore();
Pizza pizza = jpPizzaStore.GetPizza("VegetablePizza");
}
public abstract class PizzaStore()
{
// Code Here...
}
public class CNPizzaStore:PizzaStore
{
// Code Here...
}
public class JPPizzaStore:PizzaStore
{
// Code Here...
}
public class USPizzaStore:PizzaStore
{
// Code Here...
}
大概就是这个样子,编码方式,编码风格不唯一,可以用其他的形式,比如泛型,委托等等。。。这里这么写看得比较清楚。。
不知道这么写,是否大概能懂了,其实工厂模式的主要作用就是,想要什么对象,然后告诉工厂,工厂new给你,这样大概是逻辑比较清晰,因为一旦项目复杂起来,可能代码上,可读性就不会很高。
unsafe是c#可以让程序员操作内存,使用指针的一种机制,但是只能对非托管对象使用,对托管类对象是无法使用的。释放非托管对象一般是通过Close方法,或者在方法内部定义Dispose方法来进行释放。如果忘记释放了,那可以在类的析构方法中假如对非托管对象的释放操作,避免非托管对象的泄露,但是也可能出现一种情况是,在对象被CLR回收之前,非托管对象已经泄露了。因此即使回收非托管类型的对象是十分有必要的。