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

  • 相关阅读:
    【Spring源码解读】bean标签中的属性(二)你可能还不够了解的 abstract 属性和 parent 属性
    【效率工具】史上最好用的SSH一键登录脚本,第三版更新!
    WebGL简易教程——目录
    写技术博客的一些心得体会
    空间直线与球面相交算法
    three.js中帧缓存的使用
    curl使用小记(二)——远程下载一张图片
    curl使用小记(一)
    three.js中场景模糊、纹理失真的问题
    关于three.js中的矩阵更新
  • 原文地址:https://www.cnblogs.com/csj007523/p/14415894.html
Copyright © 2011-2022 走看看