1.85雷霆三合一专区http://www.njxsymb.com

当前位置主页 > 合成版本 >

OOPsie模式 - 单身模式

发布时间:2019-07-25 13:08

模式名称:单身模式
类型:Creational

单例模式是最常见的基本模式之一,它提供了对创建设计模式以及一般设计模式的精彩介绍。然而,它也是基于解耦代的某些方面的更有争议的模式之一(我们将讨论)。

模式

单例模式通常直接应用于类,用于确保整个项目中只存在该类的一个实例。在我们深入研究之前,让我们看一个例子:

以上是Atari的经典游戏Asteroids的屏幕截图。在镜头中你可以看到几个不同大小的小行星,玩家船(由中心附近的三角形代表),以及左上角的外星船。

现在,显然每个小行星,无论大小,都是一些小行星类的实例,因为它们有多个,我们知道它们不能是单身(因为它们不止一个)。为了解释一个单例,让我们回想几个OOPsie之前我们讨论过多态的问题。

当我们学习多态时,我们使用了一个僵尸的例子,并在我们的主函数中有以下代:

公共课DeadRisingGame
{
? static void Main(string [] args)
? {
?列表僵尸=新名单()

? //创建3个新僵尸
zombies.Add(new PlaidZombie());
? zombies.Add(new WomanZombie());
? zombies.Add(新的BrownShirtZombie());

? //打印一些陈述
? foreach(僵尸?僵尸中的僵尸)
? {
? Console.WriteLine(“Type:”+ zomb.ZombieType);
? Console.WriteLine(“运动类型:”+ zomb.MovementType());
? }
? }
}

输出:
类型:格纹 - 僵尸
机芯类型:慢慢走动
类型:女人 - 僵尸
机芯类型:绊倒
类型:棕色衬衫-Zombie
运动类型:大喊大叫

注意粗体部分,它创建了一个僵尸对象列表并添加了僵尸。显然,在这一点上我们添加僵尸的多个列表是没有意义的,所以列表本身可以用?单例模式建模。但是,在上面的代中没有说我们不能有另一个僵尸列表。让我们在这个例子中引入一个简单的单例模式并查看代:

公共密封?类GameZombies
{
? //单例实例
?私人静态?GameZombies _gameZombies;

? //私密存储所有僵尸的列表
private List()_zombies;

? //访问僵尸列表的公共属
? public List()Zombies {get {return?_zombies; }

?私人GameZombies()
? {

? }

? //获取此类的单个实例的公共属
?公共GameZombies实例
? {
?得到{
? if(_gameZombies == null){
? _gameZombies = new GameZombies();
? }
?返回_gameZombies;
? };
? }

? //在游戏僵尸列表中添加一个新的僵尸
? public void Add(Zombie zomb)
? {
? _zombies.Add(zomb);
? }
}

公共课DeadRisingGame
{
? static void Main(string [] args)
? {
? //创建3个新僵尸
GameZombies.Instance.Add(new PlaidZombie());
? GameZombies.Instance.Add(new WomanZombie());
? GameZombies.Instance.Add(new BrownShirtZombie());

? //打印一些陈述
? foreach(Zombie?Zombie in GameZombies.Instance.Zombies)
? {
? Console.WriteLine(“Type:”+ zomb.ZombieType);
? Console.WriteLine(“运动类型:”+ zomb.MovementType());
? }
? }
}

输出:
类型:格纹 - 僵尸
机芯类型:慢慢走动
类型:女人 - 僵尸
机芯类型:绊倒
类型:棕色衬衫-Zombie
运动类型:大喊大叫

警告:您应该首先注意到,这种模式给我们的程序增加了相当多的复杂。我们基本上扩展了一条线(创建了一个新列表)并围绕它构建了一个完整的类。就像我在OOPsie模式介绍中提到的那样,设计模式并不总是需要使用和错误使用会造成不必要的复杂。

让我们进入模式。在这一点上,我们将重点放在GameZombies类上,该类的定义非常类似于标准类,但是使用它与我们所看到的完全不同。注意构造函数(<

模式名称:单身模式
类型:Creational

单例模式是最常见的基本模式之一,它提供了对创建设计模式以及一般设计模式的精彩介绍。然而,它也是基于解耦代的某些方面的更有争议的模式之一(我们将讨论)。

模式

单例模式通常直接应用于类,用于确保整个项目中只存在该类的一个实例。在我们深入研究之前,让我们看一个例子:

以上是Atari的经典游戏Asteroids的屏幕截图。在镜头中你可以看到几个不同大小的小行星,玩家船(由中心附近的三角形代表),以及左上角的外星船。

现在,显然每个小行星,无论大小,都是一些小行星类的实例,因为它们有多个,我们知道它们不能是单身(因为它们不止一个)。为了解释一个单例,让我们回想几个OOPsie之前我们讨论过多态的问题。

当我们学习多态时,我们使用了一个僵尸的例子,并在我们的主函数中有以下代:

公共课DeadRisingGame
{
? static void Main(string [] args)
? {
?列表僵尸=新名单()

? //创建3个新僵尸
zombies.Add(new PlaidZombie());
? zombies.Add(new WomanZombie());
? zombies.Add(新的BrownShirtZombie());

? //打印一些陈述
? foreach(僵尸?僵尸中的僵尸)
? {
? Console.WriteLine(“Type:”+ zomb.ZombieType);
? Console.WriteLine(“运动类型:”+ zomb.MovementType());
? }
? }
}

输出:
类型:格纹 - 僵尸
机芯类型:慢慢走动
类型:女人 - 僵尸
机芯类型:绊倒
类型:棕色衬衫-Zombie
运动类型:大喊大叫

注意粗体部分,它创建了一个僵尸对象列表并添加了僵尸。显然,在这一点上我们添加僵尸的多个列表是没有意义的,所以列表本身可以用?单例模式建模。但是,在上面的代中没有说我们不能有另一个僵尸列表。让我们在这个例子中引入一个简单的单例模式并查看代:

公共密封?类GameZombies
{
? //单例实例
?私人静态?GameZombies _gameZombies;

? //私密存储所有僵尸的列表
private List()_zombies;

? //访问僵尸列表的公共属
? public List()Zombies {get {return?_zombies; }

?私人GameZombies()
? {

? }

? //获取此类的单个实例的公共属
?公共GameZombies实例
? {
?得到{
? if(_gameZombies == null){
? _gameZombies = new GameZombies();
? }
?返回_gameZombies;
? };
? }

? //在游戏僵尸列表中添加一个新的僵尸
? public void Add(Zombie zomb)
? {
? _zombies.Add(zomb);
? }
}

公共课DeadRisingGame
{
? static void Main(string [] args)
? {
? //创建3个新僵尸
GameZombies.Instance.Add(new PlaidZombie());
? GameZombies.Instance.Add(new WomanZombie());
? GameZombies.Instance.Add(new BrownShirtZombie());

? //打印一些陈述
? foreach(Zombie?Zombie in GameZombies.Instance.Zombies)
? {
? Console.WriteLine(“Type:”+ zomb.ZombieType);
? Console.WriteLine(“运动类型:”+ zomb.MovementType());
? }
? }
}

输出:
类型:格纹 - 僵尸
机芯类型:慢慢走动
类型:女人 - 僵尸
机芯类型:绊倒
类型:棕色衬衫-Zombie
运动类型:大喊大叫

警告:您应该首先注意到,这种模式给我们的程序增加了相当多的复杂。我们基本上扩展了一条线(创建了一个新列表)并围绕它构建了一个完整的类。就像我在OOPsie模式介绍中提到的那样,设计模式并不总是需要使用和错误使用会造成不必要的复杂。

让我们进入模式。在这一点上,我们将重点放在GameZombies类上,该类的定义非常类似于标准类,但是使用它与我们所看到的完全不同。注意构造函数(<

模式名称:单身模式
类型:Creational

单例模式是最常见的基本模式之一,它提供了对创建设计模式以及一般设计模式的精彩介绍。然而,它也是基于解耦代的某些方面的更有争议的模式之一(我们将讨论)。

模式

单例模式通常直接应用于类,用于确保整个项目中只存在该类的一个实例。在我们深入研究之前,让我们看一个例子:

以上是Atari的经典游戏Asteroids的屏幕截图。在镜头中你可以看到几个不同大小的小行星,玩家船(由中心附近的三角形代表),以及左上角的外星船。

现在,显然每个小行星,无论大小,都是一些小行星类的实例,因为它们有多个,我们知道它们不能是单身(因为它们不止一个)。为了解释一个单例,让我们回想几个OOPsie之前我们讨论过多态的问题。

当我们学习多态时,我们使用了一个僵尸的例子,并在我们的主函数中有以下代:

公共课DeadRisingGame
{
? static void Main(string [] args)
? {
?列表僵尸=新名单()

? //创建3个新僵尸
zombies.Add(new PlaidZombie());
? zombies.Add(new WomanZombie());
? zombies.Add(新的BrownShirtZombie());

? //打印一些陈述
? foreach(僵尸?僵尸中的僵尸)
? {
? Console.WriteLine(“Type:”+ zomb.ZombieType);
? Console.WriteLine(“运动类型:”+ zomb.MovementType());
? }
? }
}

输出:
类型:格纹 - 僵尸
机芯类型:慢慢走动
类型:女人 - 僵尸
机芯类型:绊倒
类型:棕色衬衫-Zombie
运动类型:大喊大叫

注意粗体部分,它创建了一个僵尸对象列表并添加了僵尸。显然,在这一点上我们添加僵尸的多个列表是没有意义的,所以列表本身可以用?单例模式建模。但是,在上面的代中没有说我们不能有另一个僵尸列表。让我们在这个例子中引入一个简单的单例模式并查看代:

公共密封?类GameZombies
{
? //单例实例
?私人静态?GameZombies _gameZombies;

? //私密存储所有僵尸的列表
private List()_zombies;

? //访问僵尸列表的公共属
? public List()Zombies {get {return?_zombies; }

?私人GameZombies()
? {

? }

? //获取此类的单个实例的公共属
?公共GameZombies实例
? {
?得到{
? if(_gameZombies == null){
? _gameZombies = new GameZombies();
? }
?返回_gameZombies;
? };
? }

? //在游戏僵尸列表中添加一个新的僵尸
? public void Add(Zombie zomb)
? {
? _zombies.Add(zomb);
? }
}

公共课DeadRisingGame
{
? static void Main(string [] args)
? {
? //创建3个新僵尸
GameZombies.Instance.Add(new PlaidZombie());
? GameZombies.Instance.Add(new WomanZombie());
? GameZombies.Instance.Add(new BrownShirtZombie());

? //打印一些陈述
? foreach(Zombie?Zombie in GameZombies.Instance.Zombies)
? {
? Console.WriteLine(“Type:”+ zomb.ZombieType);
? Console.WriteLine(“运动类型:”+ zomb.MovementType());
? }
? }
}

输出:
类型:格纹 - 僵尸
机芯类型:慢慢走动
类型:女人 - 僵尸
机芯类型:绊倒
类型:棕色衬衫-Zombie
运动类型:大喊大叫

警告:您应该首先注意到,这种模式给我们的程序增加了相当多的复杂。我们基本上扩展了一条线(创建了一个新列表)并围绕它构建了一个完整的类。就像我在OOPsie模式介绍中提到的那样,设计模式并不总是需要使用和错误使用会造成不必要的复杂。

让我们进入模式。在这一点上,我们将重点放在GameZombies类上,该类的定义非常类似于标准类,但是使用它与我们所看到的完全不同。注意构造函数(<

上一篇:开发人员必须主动进行项目管理
下一篇:Natal Cirque de Soleil活动详细介绍

相关推荐