我想让程序的更改设置立即生效,而不是重新启动我的程序,这里适用的设计模式是什么。程序设置设计模式
有一个中心设置类,一旦设置更改它来更新需要更新,如果对象的数量是很大的,这将创建对象和设置
之间不必要的依赖对象的属性观察者模式如何,但似乎这种模式在这里也不适合。然后我必须添加事件处理程序的对象,但似乎这不是对象的责任。
您的解决方案是什么?
我想让程序的更改设置立即生效,而不是重新启动我的程序,这里适用的设计模式是什么。程序设置设计模式
有一个中心设置类,一旦设置更改它来更新需要更新,如果对象的数量是很大的,这将创建对象和设置
之间不必要的依赖对象的属性观察者模式如何,但似乎这种模式在这里也不适合。然后我必须添加事件处理程序的对象,但似乎这不是对象的责任。
您的解决方案是什么?
不是一个好主意。你不希望你的设置对象知道所有这些对象。另一种方式肯定会更好。
- >为什么在这里是这种模式不适合?
观察者模式听起来像你想要的!
考虑它在“SettingListener”
我们曾经为我们的项目之一的类似要求的范围内。
我们使用了一个包含设置的Singleton类。所有的物体都知道这个物体,并且在他们需要的时候从那里汇集他们的设置。
这辛格尔顿有一个IsValid属性。您通过Singleton的getInstance方法获得配置。当isValid为false时,getInstance在返回之前将配置重新加载到实例中。
基本上,你改变了设置文件的辛格尔顿用,然后无效辛格尔顿宣布它重新加载其设置。
根据什么正在改变有一对夫妇的方式来处理不重新启动应用程序。
如果你有一个单身所有设置,那么你可以告诉它从配置文件重新加载,并且由于静态值都在此,应用程序立即开始使用新的值。
如果您要更改某些更重要的内容,您可能必须确保应用程序的设计方式能够让控制器进入并进行必要的更改,但这可能最好需要重新启动,即使用户不这样做,但你只是告诉应用程序重新初始化自己。
的变化上#2:定义的方式来标记某些特征是设置。例如,
class Screen {
...
[Setting("screen.blink")]
public boolean Blink { ... set { ... } }
}
这里的想法是,当用户切换的screen.blink
设置,设置代码会自动完成,也就是说,Screen.Instance.Blink = true
(或假)。这与观察者模式是一样的,但它似乎更松散地与我联系在一起。
另一方面,设置代码必须知道如何掌握正确的对象。在玩具上面的例子我想你可以做Screen.Instance
。这很简单。这一切都取决于你的项目。你需要找出一个寻找适合你的可配置对象的约定。
我一部分与DPB同意。使用Singleton是集中访问“缓存”设置的好方法。但是,这是被动访问。当设置被改变时,没有使用Singleton SettingClass的类将被通知改变。
要获得通知机制,您需要需要来介绍某种发布者 - 订阅者模式。
据我所知,你有你的观察者引入事件处理程序的问题,因为你认为是不是观察者的责任。我同意这一点。
如果您有 - 例如 - 一个被动的商业实体,你不想用事件处理程序或属性来污染它。也许你可以使用一个观察者和访问者模式的组合,所以你不需要通知你的类侵入行动。
我会试试你的解决方案。 – Benny 2009-12-13 06:43:29
听起来像这是解决方案1,引入了不必要的依赖。难以重复使用对象。 – Benny 2009-12-11 07:20:23
是的,但你不更新的对象。对象不关心更改的设置。他们从某人那里获得设置,并且有人对他们负责。如果设置发生变化,所有对象都不会注意到。 – 2009-12-11 07:25:06