1
A
回答
2
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
这是多音,一个实际的例子
1
Multiton
是一种设计模式,这将确保只有一个对象将用于密钥在多线程环境中创建。因此,如果多个线程尝试传递相同的密钥,则应该为该密钥获取相同的对象(锁定对象)。可能我们称之为基于关键的单身人士。
如果我们有只有一个锁定整个系统中的对象;那么你的应用程序就是singleTon
。但是这里有多个锁定对象;并用键映射每个对象。
一个例子是;假设有多个会议,并且您希望允许会议的呼叫者逐个加入(统计会议中的呼叫者数量)(每个会议对象同步)及其各自的会议ID。如果我有单身对象,那么即使来自不同会议的呼叫者也会被阻止。所以我需要锁定每个会议。
所以会议锁定对象应根据会议ID创建;并且当多个线程试图访问具有相同会议ID(多密钥)的相同会议对象时,应该最终在系统中进行同步。因此,如果两个呼叫者同时拨打同一个会议将会同步。
class LockByKey {
ObjectForStringKey objHolder = new ObjectForStringKey(100);
public void lockThenWorkForKey (String key) {
synchronized(objHolder.valueOf(key)){
//DoSomeWork
}
}
}
//MultiTon
public final class ObjectForStringKey {
private final Object[] cache;
private final int cacheSize;
final int mask;
public ObjectForStringKey(int size) {
// Find power-of-two sizes best matching arguments
int ssize = 1;
while (ssize < size) {
ssize <<= 1;
}
mask = ssize - 1;
cache = new Object[ssize];
cacheSize = ssize;
//build the Cache
for (int i = 0; i < cacheSize; i++) {
this.cache[i] = new Object();
}
}
public Object valueOf(String key) {
int index = key.hashCode();
return cache[index & mask];
}
}
0
我认为Java的ScriptEngine
的例子就是一个很好的例子:
// For nashorn
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
// For rhino
ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
犀牛和犀牛都(通用)ScriptEngine
的,只有参数显示这是用来执行。
0
另一个例子:
假设你有一些监控摄像头,每个摄像头可以有一个,只有一个控制器。
在这种情况下,你应该得到相机类multiton。它有一个包含<key, camera>
对的哈希映射。如:
public sealed class Camera
{
static Dictionary<int, Camera> _cameras = new Dictionary<int, Camera>();
static object _lock = new object();
private Camera()
{
HardwareId = Guid.NewGuid();
}
public static Camera GetCamera(int cameraCode)
{
lock (_lock)
{
if (!_cameras.ContainsKey(cameraCode)) _cameras.Add(cameraCode, new Camera());
}
return _cameras[cameraCode];
}
public Guid HardwareId { get; private set; }
}
相关问题
- 1. 寻找真实世界的Gradle例子
- 2. OOP真实世界示例
- 3. OOPS的真实世界示例
- 4. Mesos真实世界的用例
- 5. Builder模式的真实世界示例
- 6. Paxos的真实世界示例
- 7. 真实世界的反射示例
- 8. RxJava的真实世界用例对象
- 9. PHP:真实世界的OOP示例
- 10. 接口的使用,实际的和真实世界的例子
- 11. NPOI真实世界枢轴示例
- 12. 真实世界的目的
- 13. 真实世界中的Glassfish
- 14. 使用os.plock的真实世界的例子?
- 15. php中的特质 - 任何真实世界中的例子
- 16. 获得NHibernate的声明。真实世界的项目例子?
- 17. Nhibernate的真实世界复杂的例子
- 18. 在javascript中记忆的真实世界的例子?
- 19. OpenGL ES 2.0多重网格? (只是真实世界的例子)
- 20. Hapi.js,Bookshelf.js和一个真实世界的例子
- 21. ASP.NET MVC Web.Api路由 - 真实世界的例子
- 22. 在终极版真实世界的例子关于规范
- 23. Exec的现实世界的例子
- 24. 真实世界对象
- 25. RabbitMQ真实世界场景
- 26. 真实世界的接口实现
- 27. jquery的真实世界实例$ .Callbacks();和它的功能
- 28. hello世界ehcache的例子?
- 29. TIS-100的真实世界模拟
- 30. 真实世界的3D应用
它可以用于资源池。 [本文解释了一些用例](http://gen5.info/q/2008/07/25/the-multiton-design-pattern/) – 2012-03-09 08:51:23