假设我有一大堆方法的类,并且我希望这些方法在配置文件中的某个标志关闭的情况下基本上不运行。 。遵循什么样的设计模式?我想到了有条件的运行方法等黑客行为(例如Can I conditionally control method calls at runtime with attributes?)。“关闭”一个类的实例的正确设计模式是什么?
回答
假设两者之间有一个接口,那么在这种情况下可以用一个虚拟替换实现。像
interface IFoo
void DoBla()
class DummyFoo : IFoo
void DoBla() {}
class RealFoo : IFoo
void DoBla() {
[some actual code]
}
让我们保持简单。没有模式和所有过度思考恕我直言。如果您不希望方法在标志关闭时执行任何操作,则不应该调用方法本身。
IF Config.Flag = OFF
DoNothing();
ELSE
CallMethod();
比。
CallMethod() {
IF Config.Flag = OFF
DoNothing();
ELSE
DoSomething();
}
原因,我会在1日一票是因为你的代码的读者知道发生了什么事情和配置标志的意义。在后来的情况下,如果他们不知道国旗,他们可能会期望发生什么事情,并在没有任何事情发生时感到困惑。
我会对第二个投票,因为尽管可读性较差,如果对这些方法进行大量调用,并且确保对方法的所有调用实际上按照期望执行,则会导致更少的代码膨胀。 – ohmusama
你也有一点。 – niksofteng
评论在这种情况下很重要。这个班级应该记录清楚,以避免混淆。 – ohmusama
实现此功能的一种相对无痛的方式是使用空条件运算符来使用委托调用。
定义您的代表对于给定的方法:
private Action ConditionalSomeMethod;
private Action<string> ConditionalSomeMethod2;
private void SomeMethod() { }
private void SomeMethod2(String arg) {Console.WriteLine(arg);}
然后根据分配给您的病情代表。
private void SetupConditionalMethods()
{
bool runConditionals = true;
if (runConditionals)
{
ConditionalSomeMethod = SomeMethod;
ConditionalSomeMethod2 = SomeMethod2;
}
else
{
ConditionalSomeMethod = null;
ConditionalSomeMethod2 = null;
}
}
使用空条件运算符的示例用法。
private void DemoIt()
{
ConditionalSomeMethod?.Invoke();
ConditionalSomeMethod2?.Invoke("hello");
}
如果委托为空,则不调用该方法。
- 1. 什么是ASP.NET MVC中自定义模板类型的正确设计模式?
- 2. 在openstack上关闭一个实例的过程是什么?
- 3. 关闭一个类中的SerialPort实例
- 4. 什么是正确的设计方法?
- 5. 为什么JdbcTemplate是模板方法设计模式的一个例子
- 6. 使用JavaScript设计模式实现的一些示例是什么?
- 7. 正确设计一个关闭调用者窗口的命令?
- 8. 确保单个课程实例的正确方法是什么?
- 9. 使用Ajax数据的设计模式。什么是正确的方式?
- 10. 要实例化的类的设计模式一旦
- 11. 设计模式 - 这是什么模式?
- 12. 设计模式实例
- 13. C++:什么是实例化的正确的方式在堆栈中的类
- 14. 什么是正确的文本模式?
- 15. 什么是正确的MVC模式?
- 16. 什么是从Controller实例化IRepository类的正确方法?
- 17. 什么是实现Viewholder设计模式的最佳方式。
- 18. jQuery什么是解决这个`关闭`的正确方法
- 19. “monkeypatching”背后的正式设计模式是什么?
- 20. 一个类可以是一个实例是否正确?
- 21. .net中的设计模式是什么?
- 22. 这是什么样的设计模式?
- 23. 设计一个正确的方式
- 24. 什么是设置和实例化类级别变量的正确方法?
- 25. 确保EntityManager连接关闭的正确方法是什么?
- 26. 为什么JDBC是Bridge设计模式的典型例子?
- 27. 全球Smarty实例的设计模式
- 28. 什么是实施工厂模式的正确方法?
- 29. Ruby on Rails,关联两个实例的正确方法是什么?
- 30. 访问示例以外的类方法实例的正确方法是什么?
定义“正确”。有可能有多种方式来做到这一点,适合你的方式取决于你的具体情况以及对你来说重要的事情。 – hatchet
这可能会对你的应用感兴趣:[空对象模式](https://en.wikipedia.org/wiki/Null_Object_pattern) –