Tag: 设计模式

通过JSON配置选择策略

我正在Java / Kotlin中实施一个学习代理。 该代理功能的一部分涉及通过大量可能的选项进行搜索。 搜索可能性空间有很多好方法,我经常改变我的想法,哪一个是最好的。 所以我决定把它作为一个战略模式来实施。 class Agent(val searchStrategy : SearchStrategy){ fun search(input : InputGraph) : Result{ return searchStrategy.search() } } interface SearchStrategy{ fun search(input : InputGraph) : Result } class FastSearch : SearchStrategy{ //implementation here } class AccurateSearch : SearchStrategy{ // implementation here } class ExperimentalSerach : SearchStrategy{ // implentation here } 最近,我决定运行一大组实验来测试各种系统参数的有效性。 这是通过一个python脚本完成的,该脚本通过运行带有不同config.json文件的编译jar作为参数来踢每个实验。 […]

Kotlin / Android应用程序 – 从外部活动更改视图元素

我正在使用kotlin lang来创建我的Android应用程序。 我想创建一个对象(单身人士),专门用于动态地(如按钮等)模仿我的主要活动的视图组件,并将被我的主要活动本身使用。 出现了一些问题。 首先,对象是(当然)不是活动类型,所以我不能使用例如findViewById和其他活动的功能等我试图通过传递主要活动的对象的构造函数来解决这个问题,但它是不允许的 – 因为对象不能他们的构造函数。 此外,我不知道,如果这个应用程序设计是可以接受的,至少有良好的做法。 如果不是真的 – 我应该使用什么样的设计模式来分离如何改变布局的逻辑和只修改视图元素的代码? 提前感谢您的任何建议。

如何在Kotlin中实现模板方法设计模式?

考虑这个问题: 我们有一个抽象方法的Base类。 现在,我们想强制执行这个方法的每一个重写将执行一些参数检查或一些其他的苦差事。 我们希望这个参数检查在所有覆盖中都是相同的。 一种解决方案是将这种行为包装在一个非抽象方法中,该方法调用抽象方法: abstract class Base { fun computeSomething(argument: Int): Int { require(argument > 0) // Some intricate checking return execute(argument) } // Pure functionality, assuming correct arguments // Ideally, this would be private. protected abstract fun execute(validArgument: Int): Int } class Derived1: Base() { override fun execute(validArgument: Int): Int = validArgument * […]

如何在Kotlin中实现纪念模式

我目前正在尝试在Kotlin中实现一些设计模式作为练习,而且我有点卡住了“纪念品”模式。 我的参考资源是SourceMaking:Memento 。 我想要实现这个结构: 当按照他们的“清单” 确定“看管人”和“鼻祖”的角色。 创建一个纪念品课,并宣布发起人的朋友。 看守人知道什么时候“检查点”的鼻祖。 发起人创建一个纪念品,并将其状态复制到该纪念品。 看守者坚持(但不能偷看)纪念品。 看守人知道什么时候“回滚”发起人。 发起人使用Memento中保存的状态恢复自己。 我无法步骤5工作。 如何制作一个Memento对象,其字段可以从Originator实例中读取,但对于Caretaker来说是完全不透明的? 我已经用Java成功实现了这个功能,如下所示: public class Originator { private final int id; private String title; private String description; public Originator(int id) { this.id = id; } /* skipping title and description getter & setter */ public Memento saveState() { return new Memento(new State(id, title, […]

如何在Kotlin中实现Builder模式?

嗨,我是Kotlin世界的新手。 我喜欢迄今为止所看到的,并开始考虑将我们在应用程序中使用的一些库从Java转换为Kotlin。 这些库充满了Pojos,包括setter,getters和Builder类。 现在我已经用Google搜索了解在Kotlin中实施建筑商的最佳方法,但没有成功。 第二次更新:现在的问题是如何编写一个简单的POJO的Builder设计模式与Kotlin中的一些参数? 下面的代码是我通过编写java代码然后使用eclipse-kotlin-plugin转换成Kotlin的尝试。 class Car private constructor(builder:Car.Builder) { var model:String? = null var year:Int = 0 init { this.model = builder.model this.year = builder.year } companion object Builder { var model:String? = null private set var year:Int = 0 private set fun model(model:String):Builder { this.model = model return this } fun year(year:Int):Builder […]