Skip to content

Instantly share code, notes, and snippets.

@aya-eiya
Created August 31, 2012 06:57
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aya-eiya/3549740 to your computer and use it in GitHub Desktop.
Save aya-eiya/3549740 to your computer and use it in GitHub Desktop.
マリオを抽象化してみた
interface キャラ {
public void 死ぬ()
}
abstract class Abs敵キャラ implements キャラ{
String _name = "名無しさん"
public void 死ぬ(){
println "${_name}死亡"
}
}
abstract class Absマリオ implements キャラ{
public void 死ぬ(){
println 'マリオ死亡'
}
public Absマリオ on敵に触れる(Abs敵キャラ 敵){
死ぬ()
return new マリオの死体();
}
}
class チビマリオ extends Absマリオ{
}
class デカマリオ extends Absマリオ{
public Absマリオ on敵に触れる(Abs敵キャラ 敵){
return toチビ();
}
private Absマリオ toチビ(){
println 'ちっちゃくなっちゃった!'
return new チビマリオ()
}
}
class 無敵マリオ extends Absマリオ{
public Absマリオ on敵に触れる(Abs敵キャラ 敵){
敵.死ぬ()
return this;
}
}
class マリオの死体 extends Absマリオ{
public void 死ぬ(){
println 'し……死んでる……'
}
public Absマリオ on敵に触れる(Abs敵キャラ 敵){
死ぬ()
return this;
}
}
Abs敵キャラ myノコノコ = new Abs敵キャラ(){ {_name = "ノコノコ"} }
List<Absマリオ> myマリオ達 = [new チビマリオ(),new デカマリオ(),new 無敵マリオ()]
myマリオ達.each {
println "(${it.class.name}が敵に触れ続けてみた)"
it.on敵に触れる(myノコノコ).on敵に触れる(myノコノコ).on敵に触れる(myノコノコ)
}
@aya-eiya
Copy link
Author

(チビマリオが敵に触れ続けてみた)
マリオ死亡
し……死んでる……
し……死んでる……
(デカマリオが敵に触れ続けてみた)
ちっちゃくなっちゃった!
マリオ死亡
し……死んでる……
(無敵マリオが敵に触れ続けてみた)
ノコノコ死亡
ノコノコ死亡
ノコノコ死亡
Result: [チビマリオ@10d4ade, デカマリオ@1ae74f5, 無敵マリオ@80bc28]

@aya-eiya
Copy link
Author

直接は関係がない話しだけど、
http://dqn.sakusakutto.jp/2012/08/if-else.html
を読んで、これって題材がif文が要らない話しなんじゃねーのと思ったので。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment