设计模式

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

 

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();
}
}

posted @   大树2  阅读(33)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2020-02-19 web前端高级进阶内容列表
2020-02-19 VUE 归纳总结
2020-02-19 微信小程序开发
2014-02-19 .net EntityFramework用法探索系列 1
2014-02-19 EntityFramework ,ef 介绍
点击右上角即可分享
微信分享提示