我们一直在我的工作场所争论有关使用观察者模式解决其中一个问题的问题.我不知何故闻到"过度使用",但我很开心.所以要求是
我们有一个对象层次结构 - >订单和订单中的多个订单项.订单取消后,所有订单项都需要取消.
为此,我们创建了一个OrderCancel类,它是Observer模式习语中的Subject和LineItemCancel类,它是Observer.我们还有一个带有cancelOrders(List orders)方法的OrderManager类,该方法实例化OrderCancel和相应的LineItemCancel对象,然后在OrderCancel中将它们全部注册.代码如下.
public class OrderManager {
public void cancelOrders(List<Order> orders){
for(Order order :orders){
OrderCancel orderCancel = new OrderCancel(order);
Listener listener = new LineItemCancel(order);
orderCancel.addListeners(listener);
orderCancel.cancel();
}
}
}
Run Code Online (Sandbox Code Playgroud)
public class OrderCancel implements Subject {
private List<Listener> listeners = new ArrayList<Listener>();
private Order order;
public OrderCancel(Order order) {
this.order = order;
}
@Override
public void addListeners(Listener listener) {
listeners.add(listener);
}
@Override
public void notifyListeners() {
for(Listener listener : listeners){
listener.update();
}
}
public void cancel() {
notifyListeners(); …Run Code Online (Sandbox Code Playgroud) 我会试着问我的问题,所以它不会以一个简单的争论性线索结束。
我最近进入了一个用 C# 编码的应用程序,我发现了异常机制。我和他们有过一些不好的经历,例如以下
// _sValue is a string
try
{
return float.Parse(_sValue);
}
catch
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我把它改成:
float l_fParsedValue = 0.0f;
if (float.TryParse(_sValue, out l_fParsedValue))
{
return l_fParsedValue;
}
else
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
结果,我在 Visual Studio 中的输出不再充斥着类似的消息
第一次机会 System.FormatException blabla
当像“-”这样的字符串到达代码段时。我认为使用第二个片段更干净。
更进一步,我经常看到异常被过于频繁地使用 ilke:“我在这个 try-catch 中做我想做的任何事情,如果有什么问题,就抓住。”。
现在,为了不陷入糟糕的误解,我希望你们帮助我清楚地定义如何/何时使用这些异常,以及何时坚持使用老派的“if...else”。
在此先感谢您的帮助!