欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

象棋子 设计模式_通过设计国际象棋游戏了解策略模式

发布时间:2023/12/3 asp.net 61 豆豆
生活随笔 收集整理的这篇文章主要介绍了 象棋子 设计模式_通过设计国际象棋游戏了解策略模式 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

象棋子 设计模式

今天,我们将借助一个示例来尝试了解策略模式。

我们将考虑的示例是国际象棋游戏。 这里的目的是解释策略模式,而不是构建全面的国际象棋游戏解决方案。

策略模式:策略模式被称为行为模式–用于管理对象之间的算法,关系和职责。 策略模式的主要好处是在运行时选择算法/行为。



让我们尝试通过实现设计棋盘游戏来理解这一点。

在国际象棋中,有不同的角色,例如国王,皇后,主教,并且所有角色都有不同的动作。 此设计可能有许多解决方案,让我们一个一个地探索:

  • 第一种方法是在每个类中定义运动,每个字符都有其自己的move()实现。 这样,就没有代码可重用性,并且我们无法在运行时更改实现。
  • 制作一个单独的MovementController类,然后为对象的每种类型的运动放置一个if否则。
  • public class BadDesginCharacterMovementController {public void move(Character character){if(character instanceof King){System.out.print("Move One Step forward");}else if(character instanceof Queen){System.out.print("Move One Step forward");}else if(character instanceof Bishop){System.out.print("Move diagonally");}} }

    这是一个较差的设计,具有很强的耦合性,而且使用if / else使其难看。

    因此,我们希望有一个设计,在其中可以进行松散耦合,可以在运行时确定运动算法,并且具有代码可重用性。

    让我们看看使用策略模式的完整实现。

    下面是我们的实现的类图:

    • 完整的源代码可以从这里下载。

    我们将有一个基本的抽象类作为Character Class,所有的角色都可以扩展并设置自己的MovementBehaviour实现。

    public class Character {private MovementBehaviour movementBehaviour;String move(){return movementBehaviour.move();}public void setMovementBehaviour(MovementBehaviour movementBehaviour) {this.movementBehaviour = movementBehaviour;} }

    这个班级有一个运动行为:

    public interface MovementBehaviour {String move(); }

    因此,每个角色:国王,女王,主教都将扩展角色,并且他们可以有自己的运动行为实现。

    public class King extends Character {public King() {setMovementBehaviour(new SingleForward());} }

    为了简单起见,在这里,我在King的构造函数中调用了setMovemementBehaviour方法。

    同样,另一个字符皇后可以定义为:

    public class Queen extends Character {public Queen() {setMovementBehaviour(new SingleForward());} }

    并且,Bishop为:

    public class Bishop extends Character {public Bishop() {setMovementBehaviour(new DiagonalMovement());} }

    不同动作的实现可以如下:

    单向前进:

    public class SingleForward implements MovementBehaviour {@Overridepublic String move() {return "move one step forward";} }

    对角运动:

    public class DiagonalMovement implements MovementBehaviour {@Overridepublic String move() {return "Moving Diagonally";} }

    通过这个例子,我们可以理解策略模式。

    翻译自: https://www.javacodegeeks.com/2014/10/understanding-strategy-pattern-by-designing-game-of-chess.html

    象棋子 设计模式

    总结

    以上是生活随笔为你收集整理的象棋子 设计模式_通过设计国际象棋游戏了解策略模式的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。