いろんな書き方
// Killer.kill(Survivor)で条件を満たす人間を殺す caseA() { Survivor survivor = new Survivor("alice", "bob", "carol"); Killer killer = new Killer(str -> str.contains("c")); killer.kill(survivor); } // Survivor.killed(Killer)で条件を満たす人間が殺される caseB() { Survivor survivor = new Survivor("alice", "bob", "carol"); Killer killer = new Killer(str -> str.contains("c")); survivor.killed(killer); assertThat(survivor.getSurvivors(), is(ImmutableList.of("bob"))); } // Survivor.survival(Survivor, Killer)で生き残った生存者を持つ新たなSurvivorを作成する caseC() { Survivor survivor = new Survivor("alice", "bob", "carol"); Killer killer = new Killer(str -> str.contains("c")); Survivor nextSurvivor = Survivor.survival(survivor, killer); }
Survivorは生存者の名前を保持し、Killerは条件を満たす(この場合は名前に"c"が含まれる)人間を殺す役割を持ちます。
とりあえず思いついた例を3つ挙げてみました。
この程度の前提条件でもいろんな書き方が出来るのがプログラミングの面白さだと思っています。