设计模式---单例模式

一 简介

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

设计模式分类最招监狱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 = new Vote();

            }

            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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值