所以我有2个接口(如下所示),1个用于常规/免费套件,另一个用于可购买套件。它们都包含两种方法,但在可购买套件的“getIcon”方法中,我需要将播放器的配置文件作为参数,以便检查他们是否购买了该套件。
用于链接这两个接口的最佳设计模式是什么?你能告诉我代码吗?
2个接口:
public interface Kits {
void giveKit(Player player);
Item getIcon();
}
public interface PurchasableKits {
void giveKit(Player player);
Item getIcon(Profile profile);
}
我尝试使用适配器模式,但它似乎不正确,因为“getIcon”方法将配置文件作为参数但不会被使用。
public class KitAdapter implements PurchasableKits {
private Kits kits;
public KitAdapter(Kits kits) {
this.kits = kits;
}
@Override
public void givetKit(Player player){
kits.giveKit(player);
}
@Override
public void getIcon(Profile profile){
kits.getIcon();
}
}
提前致谢
答案 0 :(得分:1)
您有1个界面PurchasableKits
。一个免费的工具包将实现该接口并调用getIcon(null)
。
红旗是2个界面几乎完全相同。没有设计模式可以让你摆脱创造的情况。
答案 1 :(得分:0)
这是一个棘手的问题,因为java中避免了继承和循环继承的规则。
我不相信你需要接口,你可以这样做:
public interface Kits {
void giveKit(Player player);
//a vargars usage
Item getIcon(Profile... p);
}
public class ConcreteClass implements Kits{
@Override
public void giveKit(Player player) {
// TODO Auto-generated method stub
}
@Override
public Item getIcon(Profile... o) {
//This is the ugly thing of this method. You must check the sent params.
//However I think it is better than send a null param, as the clean code suggest to avoid
if(o.length == 0)
System.out.println("without profile");
else
System.out.println("With profile");
return null;
}
}
public class Main {
public static void main(String[] args) {
ConcreteClass my = new ConcreteClass();
my.getIcon();
my.getIcon(new Profile());
}
}
输出: 没有个人资料 随着个人资料
答案 2 :(得分:0)
所以我有2个接口(如下所示),1个用于常规/免费套件,另一个用于可购买套件。它们都包含两种方法,但在" getIcon"可购买套件的方法,我需要播放器的配置文件作为参数,以便我可以检查他们是否购买了套件。
getIcon(...)
方法中是否需要配置文件是可购买的Kit
的实施细节。我只有一个Kit
接口,其定义如下:
public interface Kit {
void giveKit(Player player);
Item getIcon(Profile profile);
}
因此,每当您想要获得图标时,您都会通过Profile
传递图标,这取决于可以购买以查看配置文件的工具包。免费的人会忽略这个论点。您有时会传入null
,有时并不意味着您事先知道它是否是免费的,这意味着您的模型出了问题。
关于您的代码的其他一些评论。只是我的意见:
KitHandler
代替Kit
?Kit
(或KitHandler
)会更好,因此您可以创建List<Kit> kits = ...
。getIcon
应该是generateIcon(...)
?