c#设计模式_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > c#设计模式

c#设计模式

 2017/8/24 16:08:41  hi阡陌  程序员俱乐部  我要评论(0)
  • 摘要:单利模式确保一个类只有一个实例,并提供一个访问它的全局访问点下面用代码来实现:///<summary>///单利模式类//////</summary>publicclassinterest{///<summary>///定义一个单利锁///</summary>privatestaticobject_lock=newobject();///<summary>///申明一个私有的全局访问变量///</summary>
  • 标签:C# 模式 设计 设计模式

单利模式

确保一个类只有一个实例,并提供一个访问它的全局访问点

下面用代码来实现:

 

class="code_img_closed" src="/Upload/Images/2017082416/0015B68B3C38AA5B.gif" alt="">
  /// <summary>
    /// 单利模式类
    /// 
    /// </summary>
  public  class interest
    {

      /// <summary>
      /// 定义一个单利锁
      /// </summary>
      private static object _lock = new object();

      /// <summary>
      /// 申明一个私有的全局访问变量
      /// </summary>
      private  static interest ins = null;

      /// <summary>
      /// 定义私有构造函数  不能使用new实例化
      /// </summary>
      private interest() { }


      /// <summary>
      /// 创建一个静态方法 返回该类的实例
      /// </summary>
      /// <returns></returns>
      public static interest GetIntance() {
          // 当第一个线程运行到这里时,此时会对locker对象 "加锁",
          // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁
          lock (_lock)
          {
              if (ins == null)
              {
                  ins = new interest();
              }
          }
         

          /*
           更好的实现方式 使用双重锁
           * 
           
           */

          //if (ins == null) {


          //    lock (_lock)
          //    {
          //        if (ins == null) {
          //            ins = new interest();
          //        }

          //    }
          
          //}
          




          return ins;
      
      }


      public string ShowMessage(string message) {
          return "hellow"+message;

       }

    }
logs_code_collapse">View Code

 

 

 

 

抽象工厂模式

在这之前我们搞一下抽象类的概念;

什么是抽象类?由子类继承必须必须实现其方法,不能实例化,在该类中没有具体实现,用abstract来修饰;

定义一个抽象类:

 1  public abstract class abstractFactory
 2     {
 3 
 4        /// <summary>
 5        /// 定义吃饭基类方法
 6        /// </summary>
 7        /// <returns></returns>
 8        public abstract eat kindeat();
 9        /// <summary>
10        /// 定义唱歌基类方法
11        /// </summary>
12        /// <returns></returns>
13        public abstract sing kindsing();
14 
15     }
View Code

      定义一个子类,继承抽象类,实现其方法:

 

  public class person : abstractFactory {

       public override eat kindeat()
       {
           return new personeat();
       }
       public override sing kindsing()
       {
           return new personsing();
       }
   
   
   }
View Code

抽象工厂我自己理解是在工厂类定义一些公共特性,比如吃饭,唱歌等,同时还要做到具体事物具体分析.比如人吃大米饭,那鸟就不是吃饭了,吃虫子.而人和鸟公共特性是吃,只是吃的东西不一样而已

所以这里就可以运用抽象中来具体实现:

 

/// <summary>
    /// 抽象工厂方法基类
    /// </summary>
   public abstract class abstractFactory
    {

       /// <summary>
       /// 定义吃饭基类方法
       /// </summary>
       /// <returns></returns>
       public abstract eat kindeat();
       /// <summary>
       /// 定义唱歌基类方法
       /// </summary>
       /// <returns></returns>
       public abstract sing kindsing();

    }


    /// <summary>
    /// 人类
    /// </summary>
   public class person : abstractFactory {

       public override eat kindeat()
       {
           return new personeat();
       }
       public override sing kindsing()
       {
           return new personsing();
       }
   
   
   }

    /// <summary>
    /// 鸟类
    /// </summary>
   public class brid : abstractFactory {
       public override eat kindeat()
       {
           return new  brideat();
       }
       public override sing kindsing()
       {
           return new bridsing();
       }
   
   }



    /// <summary>
    /// 吃饭的类
    /// </summary>
   public  abstract class eat {

       public abstract void print();
   
   }

    /// <summary>
    /// 唱歌类
    /// </summary>
   public abstract class sing {
       public abstract void print();
   
   }

    /// <summary>
    /// 人类吃饭类
    /// </summary>
   public class personeat : eat {
       public override void print()
       {
           Console.WriteLine("我tm咋吃火锅");
       }
   
   }
   public class brideat : eat
   {
       public override void print()
       {
           Console.WriteLine("虫子不好吃");
       }

   }
   public class personsing : sing {

       public override void print()
       {
           Console.WriteLine( "我才唱英文歌");
       }
   }
   public class bridsing : sing
   {

       public override void print()
       {
           Console.WriteLine("叽叽咋咋叽叽咋咋");
       }
   }
View Code

调用方法:

 

            //定义一个任务
            Task t1 = new Task(() => {
                //调用单利
                Console.WriteLine(interest.GetIntance().ShowMessage("小红"));

                Console.WriteLine(interest.GetIntance().ShowMessage("小名"));
            });
            //开启任务
            t1.Start();
            //等待线程执行完毕
            Task.WaitAll(t1);
           

            //抽象工厂模式
            abstractFactory person = new person();
            eat e = person.kindeat();
            e.print();
View Code

 

 

 

以上就是我自己简单的理解.大神勿喷!

发表评论
用户名: 匿名