我是一个有用的助手,可以翻译文本。
我有一个小程序,一旦文本发生变化就会重新绘制自己。
设计1:
这是否违反了单一职责原则(SRP)?我的Applet不仅充当Applet,还必须执行Listener的工作。同样地,DynamicText类不仅生成动态文本,还会更新已注册的Listener。 设计2:
我有一个小程序,一旦文本发生变化就会重新绘制自己。
设计1:
//MyApplet.java
public class MyApplet extends Applet implements Listener{
private DynamicText text = null;
public void init(){
text = new DynamicText("Welcome");
}
public void paint(Graphics g){
g.drawString(text.getText(), 50, 30);
}
//implement Listener update() method
public void update(){
repaint();
}
}
//DynamicText.java
public class DynamicText implements Publisher{
// implements Publisher interface methods
//notify listeners whenever text changes
}
这是否违反了单一职责原则(SRP)?我的Applet不仅充当Applet,还必须执行Listener的工作。同样地,DynamicText类不仅生成动态文本,还会更新已注册的Listener。 设计2:
//MyApplet.java
public class MyApplet extends Applet{
private AppletListener appLstnr = null;
public void init(){
appLstnr = new AppletListener(this);
// applet stuff
}
}
// AppletListener.java
public class AppletListener implements Listener{
private Applet applet = null;
public AppletListener(Applet applet){
this.applet = applet;
}
public void update(){
this.applet.repaint();
}
}
// DynamicText
public class DynamicText{
private TextPublisher textPblshr = null;
public DynamicText(TextPublisher txtPblshr){
this.textPblshr = txtPblshr;
}
// call textPblshr.notifyListeners whenever text changes
}
public class TextPublisher implments Publisher{
// implements publisher interface methods
}
问题1. 设计1是否违反SRP原则?
问题2. 在这里,使用组合来消除SRP违规是否是更好的选择,就像设计2中一样。