搜不到自己的网站,郑州网站建设公司招聘,故城网站建设,wordpress插件轮播图今天#xff0c;我们将借助一个示例来尝试了解策略模式。 我们将考虑的示例是国际象棋游戏。 这里的目的是解释策略模式#xff0c;而不是构建全面的国际象棋游戏解决方案。 策略模式#xff1a;策略模式被称为行为模式-用于管理对象之间的算法#xff0c;关系和职责。 策… 今天我们将借助一个示例来尝试了解策略模式。 我们将考虑的示例是国际象棋游戏。 这里的目的是解释策略模式而不是构建全面的国际象棋游戏解决方案。 策略模式策略模式被称为行为模式-用于管理对象之间的算法关系和职责。 策略模式的主要好处是在运行时选择算法/行为。 让我们尝试通过实现设计棋盘游戏来理解这一点。 在国际象棋中有不同的角色例如国王皇后主教并且所有角色都有不同的动作。 此设计可能有很多解决方案让我们一个一个地探索 第一种方法是在每个类中定义运动每个字符都有其自己的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方法。 同样另一个字符Queen可以定义为 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