zoukankan      html  css  js  c++  java
  • 设计模式

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

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

  • 相关阅读:
    SpringBoot进阶教程(六十二)整合Kafka
    98每日博客
    96每日博客
    95日每周总结
    829每周总结
    815每周总结
    81每周总结
    822每周总结
    97每日博客
    88每周总结
  • 原文地址:https://www.cnblogs.com/csj007523/p/14415894.html
Copyright © 2011-2022 走看看