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

  • 相关阅读:
    判断是否是三角形,三角形面积,三角形内外切圆半径和面积
    输入从a加到b的两个数字
    九九乘法表
    某公司销售员工的年终奖根据该员工的年销售总额s提成,年销售总额超过1万元才提成,超过部分提成比例如下:
    判断是否是闰年?
    从键盘上输入三个点的坐标值(1,1)、(2,4)、(3,2),编程求该三角形的面积。
    输入一个正方形的边长,输出正方形的外接圆和内接圆的面积。
    .输入一个4位正整数,以相反的次序输出,例如,输入1234,输出为4321。
    SecoClient在win10系统中连接失败解决方案
    PHP 关于判断输入日期是否合法
  • 原文地址:https://www.cnblogs.com/csj007523/p/14415894.html
Copyright © 2011-2022 走看看