设计模式

没有完美的设计模式,一个设计模式解决一类问题;设计模式的套路是组合优于继承,用不同组合的套路来解决不同类型问题;

1.单例模式

private static volatile Singleton _Singleton = null;
private static readonly object Singleton_Lock = new object();
public static Singleton CreateInstance()
{
if (_Singleton == null)
{
lock (Singleton_Lock)
  
{
 
if (_Singleton == null)//保证只实例化一次
{
_Singleton = new Singleton();
}
}
}
return _Singleton;
}

三大工厂:简单工厂,工厂方法,抽象工厂

1.简单工厂:把对象的创建转移到工厂类,让依赖的细节转移到工厂

------------------------new

IRace iRace = new Human();

------------------------简单工厂
IRace iRace2 = SimpleFactory.CreateRace(RaceType.Human);

------------------------简单工厂 读配置文件

IRace iRace2 = SimpleFactory.CreateRace(“type读配置文件”);

------------------------ 简单工厂 + 读配置文文件+ 反射

string IRacTypeConfigReflection = ConfigurationManager.AppSettings["IRacTypeConfigReflection"];
string DllName = IRacTypeConfigReflection.Split(',')[1];
string TypeName = IRacTypeConfigReflection.Split(',')[0];
Assembly assembly = Assembly.Load(DllName);
Type type = assembly.GetType(TypeName);
IRace iRace3 = Activator.CreateInstance(type) as IRace;

------------------------简单工厂

public class SimpleFactory
{
public static IRace CreateRace(RaceType raceType)
{
IRace iRace = null;
switch (raceType)
{
case RaceType.Human:
iRace = new Human();
break;
case RaceType.Undead:
iRace = new Undead();
break;
case RaceType.ORC:
break;
case RaceType.NE:
break;
default:
break;
}
return iRace;
}
}

----------工厂方法: 转移对象的创建到单独的类工厂中,留下了扩展空间-----------

public class HumanFactory : IFactory
{
public  virtual IRace CreateRace()
{
return new Human();
}
}

-----------------抽象工厂-------------

FactoryAbstract humanFactory = new HumanFactory();
IRace race = humanFactory.CreateRace();
IArmy army = humanFactory.CreateArmy();
IHero hero = humanFactory.CreateHero();
IResource resource = humanFactory.CreateResource();

public abstract class FactoryAbstract
{
public abstract IRace CreateRace();
public abstract IArmy CreateArmy();
public abstract IHero CreateHero();
public abstract IResource CreateResource();

}

//一个工厂负责一些产品的创建

public class HumanFactory : FactoryAbstract
{
public override IRace CreateRace()
{
return new Human();
}

public override IArmy CreateArmy()
{
return new HumanArmy();
}
public override IHero CreateHero()
{
return new HumanHero();
}
public override IResource CreateResource()
{
return new HumanResource();
}
}

原文地址:https://www.cnblogs.com/csj007523/p/14415894.html