封装变化----策略模式

作者: MrZ_585e | 来源:发表于2017-04-05 22:01 被阅读0次

考虑到下面这种情行:

一个动作冒险游戏:有不同的角色:弓箭手(Archer),战士(Warrior),有不同的武器:剑(Sword),匕首(Knife),弓(Bow)。。。

实现:每个角色能使用一种武器,并可以在游戏过程中换武器。


常规做法:超类Character,接口WeaponBehavior

例如 战士(Warrior)继承Character,实现WeaponBehavior获得使用剑(Sword)或者匕首(Knife)的行为。

弊端:1:需要重复写相同的代码。例如 新的角色 也使用 剑(Sword)时,又要实现一样的方法。

2:不能在运行时动态改变行为。即不能再游戏过程中换武器。耦合度太高。


策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换。

第二种做法则是使用策略模式:

 1:将变化封装起来。(这个场景变化就是使用不停的武器。

//定义使用武器的接口WeaponBehavior

public interface WeaponBehavior {

void useWeapon();

}

//定义使用不同武器的行为 SwordBehavior和KnifeBehavior

public class SwordBehavior implements WeaponBehavior{

@Override

public void useWeapon() {

System.out.println("use Sword");

}

}

public class KnifeBehavior implements WeaponBehavior{

@Override

public void useWeapon() {

System.out.println("use Knife");

}

}

2 定义角色类

//超类

public abstract class Character {

WeaponBehavior weaponBehavior;

public void setWeapon(WeaponBehavior weaponBehavior){

this.weaponBehavior = weaponBehavior;

}

abstract void fight();

}

//定义具体角色类

public class Knight extends Character{

private WeaponBehavior weaponBehavior;

public  Knight() {

this.weaponBehavior = new SwordBehavior();

}

@Override

void fight() {

weaponBehavior.useWeapon();

}

public void setWeapon(WeaponBehavior weaponBehavior){

this.weaponBehavior = weaponBehavior;

}

}

这样设计的好处:当在设计其他角色时,只需要将要使用的武器组合上去即可,而不用写重复的代码,这也是面向接口编程,而不是针对实现编程。并且可以在运行时换武器,使用implements的方法则会将角色与武器耦合在一起而做不到这一点。

public static void main(String[] args) {

Character knight = new Knight();

knight.fight();

knight.setWeapon(new KnifeBehavior());

knight.fight();

}

输出:use Sword

use Knife

相关文章

  • 封装变化----策略模式

    考虑到下面这种情行: 一个动作冒险游戏:有不同的角色:弓箭手(Archer),战士(Warrior),有不同的武器...

  • 设计模式之策略模式

    策略模式 1、什么是策略模式     策略模式让算法独立于使用它的客户而独立变化。策略模式重点是封装不同的算法和行...

  • 2018-01-29 设计模式-策略模式

    Strategy:找出变化的部分独立出来进行封装,对象行为型模式。 策略模式定义了算法簇,分别封装起来,让他们相互...

  • 设计模式——策略模式

    OO原则: 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程 OO模式策略模式:定义算法族,分别封装起来...

  • 策略设计模式

    什么是策略设计模式? 策略设计模式定义了算法族(行为族),分别封装起来,让他们之间可以互相替换,此模式让算法的变化...

  • 《设计模式》之策略模式

    定义 策略模式:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 策略模式...

  • “策略模式”原来如此简单

    一、策略模式简介 1、定义 策略模式(Strategy):将一组算法封装起来,使其可以相互替换;同时算法的变化不会...

  • php设置模式之策略模式

    策略模式 策略模式定义一系列算法,将每个算法封装起来,并让他们可以相互替换.策略模式让算法独立于使用它的客户而变化...

  • 设计模式之策略模式(Strategy)

    1. 什么是策略模式? 策略模式 定义了算法族,分别封装起来, 让它们之间可以互相替换,此模式让算法的变化独立于使...

  • 策略模式

    策略模式 含义 策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户...

网友评论

    本文标题: 封装变化----策略模式

    本文链接:https://www.haomeiwen.com/subject/ndhoottx.html