Tag: 设计模式

MVP到MVVM Android

来自这里的一个人告诉我,MVVM比MVP更好,他告诉我许多专业人士和许多conts,但我想知道我的MVP是否做得好还是你知道其他任何方式可能转换为MVVM。 这是使用Google MVP登录的。 我不会把所有的代码,但我会把文件夹和一些解释: -模型 用户(简单用户pojo类) -主持人 我有一个IGoogleLoginView的对象,我调用这些方法,但这里我有逻辑createGoogleClient() , signIn() , onActivityResult() , onStop() , onStart() , onDestroy()所有这些方法都来自我的interface在同一个包里面IGoogleSignIn IGoogleSignIn – Presenter类中的所有方法 -视图 googleSignIn() goToMainActivity() 然后我有我的MainActivity,我称之为方法… 我想知道在MVVM上做到这一点会有多么不同,做什么会有什么变化,还有什么东西不在好的地方?

如何从Java中的Decorator Pattern中删除装饰对象

我正在读“傻瓜设计模式”。 我阅读并练习了装饰模式。 使用Decorator Pattern,我们可以用任何东西装饰一个对象。 现在,我想在装饰之前删除装饰对象。我已经通过ArrayList解决了这个问题,但我仍觉得它不好。 你能告诉我如何删除装饰物吗? 什么是更好的方法? 这是我的方式: Computer.java public class Computer { public Computer() { } public String description() { return “computer”; } } ComponentDecorator.java public abstract class ComponentDecorator extends Computer { @Override public abstract String description(); } CD.java public class CD extends ComponentDecorator { private Computer computer; public CD() { } public CD(Computer […]

DAO和dependency injection,建议?

这是我第一次使用DAO模式。 从我到目前为止所读到的 ,实现这种模式将帮助我从任何持久性实现中分离我的调用代码(控制器) – 正是我想要的; 也就是说,我不想被重新使用任何特定的数据库或第三方库。 我正在使用MongoDB和morphia(作为示例)创建一些测试代码(以TDD方式),并使用morphia提供的BasicDAO类。 据我所知,扩展BasicDAO需要一个接受Morphia和Mongo对象的构造函数; 这些是非常具体的(第三方)类型,我真的不想在DAO类本身之外浮动。 我怎样才能拥有更多可插拔架构? 我的意思是,我应该考虑如何配置我的应用程序以使用具有特定配置参数的特定DAO,在实际源外部?

多次调用相同方法时取消方法调用

我想我可能会在这里描述一些名字,但我不知道。 所以我的第一个问题是要知道这种技术的名称。 这是一个例子:假设您正在网页上实施实时搜索。 每次用户在搜索框中键入内容时,您都会触发新的搜索查询,并尽可能经常更新结果。 这是一个愚蠢的事情,因为你会发送比实际需要更多的查询。 每2-3个字母发送一次请求或每100毫秒发送一次请求可能就足够了。 因此,一种技术是在键入键后立即调度查询,如果仍有计划但未执行的查询,则取消它们,因为它们现在已经过时了。 现在更具体地说,是否有特定的模式或库来解决Java中的这个问题? 我必须在Swing应用程序中解决问题,并且我使用了ExecutorService,它返回了我可以取消的ScheduledFutures。 问题是我必须手动为我想要“缓冲”的每个方法调用创建一个Runnable,并跟踪每个Future以取消它。 我确定我不是第一个实现这样的东西的人,所以某处必须有可重复使用的解决方案? 可能是Spring中有注释和代理的东西?

键入安全异构容器模式以存储项目列表

我正在尝试实现一个类型安全的异构容器来存储异构对象的列表。 我已经看到了几个类型安全的异构容器模式( 链接 )的exameples,但它们都存储了一个类型的单个对象。 我试着按如下方式实现它: public class EntityOrganizer { private Map<Class, List> entityMap = new HashMap<Class, List>(); public List getEntities(Class clazz) { return entityMap.containsKey(clazz) ? entityMap.get(clazz) : Collections.EMPTY_LIST; } private void addEntity(Class clazz, T entity) { List entityList = (List) entityMap.get(clazz); if(entityList == null) { entityList = new ArrayList(); entityMap.put(clazz, (List) entityList); } entityList.add(entity); } […]

什么是一类,一个责任原则?

我想了解一级,一个责任原则。 我找到了一些关于它的文章,但没有例子。 如果你能给我一个违反这个原则的课程的例子,这对我有帮助。 我熟悉一个方法应该只做一件事的想法,例如get和set方法。 它不能与One Class,One Responsibility相同 ,因为set和get方法都在类中实现。 那么这是否意味着该类违反了该规则,因为该类有责任设置和获取? 什么是一类,一个责任原则 ?

Java的字符串实习生是轻量级吗?

Java的String内存池的实现是否遵循flyweight模式? 为什么我有这个疑问,我看到实习生没有涉及外在国家。 在GoF中我读到内在和外在状态之间应该有一个正确的平衡。 但在实习生中,一切都是内在的。 或者我们应该说没有关于属性的严格规则,只是共享对象以减少内存就足以称之为flyweight。 请帮我理解。

如何在函数调用中强制执行序列

假设我想设计一个客户端需要以特定顺序调用函数的类,例如, hasNext(); next(); 或者,作为一个非常通用的例子,一个类CookFood与方法: class CookFood { getListOfItems(); mixAllItems(); heat(); } 在第二个例子中,我想强制说,只有在获得物品后才能进行混合,并且只有在混合后才能进行加热。 是否有任何已知的模式或良好实践强制执行函数调用序列?

什么是保持应用程序属性的好方法?

我有一系列应用程序属性,它们都有不同的类型。 类型可以包括布尔值,日期,时间戳或字符串。 我需要能够为管理用户提供更改这些属性的能力,并让系统记住/将它们保存到文件中。 我正在寻找一种最佳实践方法来存储这些应用程序属性,并能够在更改时保留它们并在启动时加载它们。

Flyweight模式中描述的内在和外在状态之间有什么区别?

从“ 四人帮”中的FlyWeight模式章节开始, FlyWeight模式适用于大多数对象状态可以是外在的 。 extrinsic state意味着什么? 我感觉这个模式用于共享对象。 如果要共享对象,那么该对象如何甚至可以拥有任何状态?