一 简介
设计模式,嘿嘿,听起来很高端,其实这个东西真正入门就会发现,他并不是什么高深的代码或者算法。我觉得他就是一个利用反射机制,继承,多态,重载,泛型等基本的语言特性来实现高性能,简介,易于扩展维护的代码。是前辈们常年累月编写总结出来的经验,就像什么时候种什么蔬菜一样。所以学习的时候,要有信心,其中奥妙会让你恍然大悟。
设计模式分类最招监狱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配置文件都是实例化为一个单例。采用的就是单例模式。单例模式保证了你的一个进程里面只会只有一个实例。