gpt4 book ai didi

java - 什么模式与策略模式一起使用可以避免具体策略中的重复代码?

转载 作者:搜寻专家 更新时间:2023-11-01 01:54:09 26 4
gpt4 key购买 nike

我对设计模式比较陌生,在下面的示例中我使用了我认为是策略模式的东西。但是,我在一些,而不是全部具体策略中重复自己,想知道是否有办法避免这种情况?在做一些独特的事情之前,请注意 ACommand 和 CCommand 如何具有相同的代码。

public interface Command 
{
public boolean execute(CommandSender sender, String[] args);
public String getName();
//...
}

public abstract class PlayerCommand implements Command
{
protected BukkitPlugin plugin = BukkitPlugin.getInstance();

private String name;
//...

public PlayerCommand(String name)
{
this.name = name;
}

public String getName()
{
return this.name;
}

//...
}

命令

    public class ACommand extends PlayerCommand
{
public ACommand()
{
super("A");
}

public boolean execute(CommandSender sender, String[] args)
{
Player player = (Player) sender;
PlayerInventory inventory = player.getInventory();
ItemStack itemInHand = inventory.getItemInHand();

if(itemInHand.getType() != Material.COMPASS)
{
sender.sendMessage("You must be holding a phone to use this command");
return true;
}

int id = itemInHand.getDurability();

MobilePhoneManager phoneManager = plugin.getMobilePhoneManager();
boolean isMobilePhone = phoneManager.isMobilePhone(id);

if(!isMobilePhone)
{
sender.sendMessage("You must be holding a mobile phone to use this command");
return true;
}

//DO SOMETHING UNIQUE HERE
}
}

B命令

public class BCommand extends PlayerCommand
{
public BCommand()
{
super("B");
}

public boolean execute(CommandSender sender, String[] args)
{
//SOMETHING ELSE
}
}

CCommand

    public class CCommand extends PlayerCommand
{
public CCommand()
{
super("C");
}

public boolean execute(CommandSender sender, String[] args)
{
Player player = (Player) sender;
PlayerInventory inventory = player.getInventory();
ItemStack itemInHand = inventory.getItemInHand();

if(itemInHand.getType() != Material.COMPASS)
{
sender.sendMessage("You must be holding a phone to use this command");
return true;
}

int id = itemInHand.getDurability();

MobilePhoneManager phoneManager = plugin.getMobilePhoneManager();
boolean isMobilePhone = phoneManager.isMobilePhone(id);

if(!isMobilePhone)
{
sender.sendMessage("You must be holding a mobile phone to use this command");
return true;
}

//DO SOMETHING UNIQUE HERE
}
}

最佳答案

您可以使用 template pattern作为 ACommandCCommand 之间公共(public)基类的基础。基类中的模板方法将保存公共(public)代码,然后调用一个 (abstract) 方法来 doSomethingUnique()

关于java - 什么模式与策略模式一起使用可以避免具体策略中的重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15371746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com