设计模式---单例模式

来源:互联网 发布:网络统考成绩查询时间 编辑:程序博客网 时间:2024/06/06 02:34

一 简介

设计模式,嘿嘿,听起来很高端,其实这个东西真正入门就会发现,他并不是什么高深的代码或者算法。我觉得他就是一个利用反射机制,继承,多态,重载,泛型等基本的语言特性来实现高性能,简介,易于扩展维护的代码。是前辈们常年累月编写总结出来的经验,就像什么时候种什么蔬菜一样。所以学习的时候,要有信心,其中奥妙会让你恍然大悟。

设计模式分类最招监狱Erich Gamma 在德国慕尼黑大学的博士论文中。1995年有他们小组合著的《DesignPattems Elements of Reusable Object Oriented Software》 系统的整理和描述了23个精选的设计模式。按照功能它们分为创建型,结构型,行为型三种。个人只列举了大学里面经常用到的一些模式。至于其他模式读者可以参阅百度。

我学习每一种设计模式的时候我都会问自己三个问题:A,该模式的原理。B代码如何实现该模式。C,为什么会总结出这种模式。后面就是按照这个思路走下去的。

 

二 创建型

2.1 单例模式

A 什么是单例模式

保证一个类只有一个实例,并提供一个访问他的全局访问点;

B 如何实现单例模式

场景:在一个投票系统中,票数VoteCount应该只有一个实例,所有参与投票的人只对这一个实例进行修改。

类图:

 

 

代码实现:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace Singleton

{

    class Program

    {

 

        static void Main(string[] args)

        {

            Vote vote =Vote.getInstance();

            Console.WriteLine(vote.getVoteCount());

            People people1=new People("程晗");

            people1.doVote();

            Console.WriteLine(vote.getVoteCount());

            People people2=new People("曹霜");

           people2.doVote();

            Console.WriteLine(vote.getVoteCount());

 

        }

 

 

    }

    ///<summary>

    ///创建一个票的类

    ///</summary>

    class Vote

    {

        private static Voteinstance = null;

        public static Vote getInstance() {

            if (instance ==null)

            {

                instance = newVote();

            }

            return instance;

        }

        private  int voteCount = 0;

        public VotegetVote()

        {

            return new Vote();

        }

        public voiddoVoteCount()

        {

           voteCount++;

        }

 

        public StringgetVoteCount()

        {

            return "当前票数为:" +voteCount;

        }

 

    }

    ///<summary>

    ///创建一个人来投票

    ///</summary>

    class People

    {

        private string name;

        bool isVote= true;

        public People(String name)

        {

            this.name =name;

        }

        public StringdoVote()

        {

            if (isVote== true)

            {

                Vote vote= Vote.getInstance();

               vote.doVoteCount();

               isVote = false;

                Console.WriteLine(this.name +"投票成功!");

                return "投票成功";

            }

            else

            {

                Console.WriteLine(this.name +"投票失败,您已经投过");

                return "投票失败,您已经投过";

            }

        }

    }

 

}

 

 

运行结果:


结果分析:

       难度不大!

C. 为什么要用单例模式

在我理解看来,不仅仅是计数,在许多地方你的都会用到单例模式。比如在我们的运维工具中每个config配置文件都是实例化为一个单例。采用的就是单例模式。单例模式保证了你的一个进程里面只会只有一个实例。

0 0
原创粉丝点击