Skip to content
This repository was archived by the owner on Jan 13, 2021. It is now read-only.

Latest commit

Β 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Β 
Β 

README.md

κ°œμš”

μš”μ²­μ„ 객체의 ν˜•νƒœλ‘œ μΊ‘μŠν™”ν•˜μ—¬ μ‚¬μš©μžκ°€ 보낸 μš”μ²­μ„ λ‚˜μ€‘μ— μ΄μš©ν•  수 μžˆλ„λ‘ λ§€μ„œλ“œ 이름, λ§€κ°œλ³€μˆ˜ λ“± μš”μ²­μ— ν•„μš”ν•œ 정보λ₯Ό μ €μž₯ λ˜λŠ” λ‘œκΉ…, μ·¨μ†Œν•  수 있게 ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€.

ν™œμš©μ„±

  • μˆ˜ν–‰ν•  λ™μž‘μ„ 객체둜 λ§€κ°œλ³€μˆ˜ν™”ν•˜κ³ μž ν•  λ•Œ
  • μ„œλ‘œ λ‹€λ₯Έ μ‹œκ°„μ— μš”μ²­μ„ λͺ…μ‹œν•˜κ³ , μ €μž₯ν•˜λ©°, μ‹€ν–‰ν•˜κ³  싢을 λ•Œ
  • μ‹€ν–‰ μ·¨μ†Œ κΈ°λŠ₯을 μ§€μ›ν•˜κ³  싢을 λ•Œ
  • μ‹œμŠ€ν…œμ΄ κ³ μž₯ 났을 λ•Œ 재적용이 κ°€λŠ₯ν•˜λ„λ‘ λ³€κ²½ 과정에 λŒ€ν•œ λ‘œκΉ…μ„ μ§€μ›ν•˜μ—¬ λ‘œκΉ…λœ λͺ…λ Ήμ–΄λ₯Ό λ‹€μ‹œ μž¬μ‹€ν–‰ ν•˜κ³ μž ν•  λ•Œ

예제 μ½”λ“œ

abstract class Command {
    abstract fun execute()
}

class Pen : Command() {
    override fun execute() {
        println("draw something with pen")
    }
}

class Shape(val shape: String) : Command() {
    override fun execute() {
        println("draw $shape")
    }
}

class PaintBucket : Command() {
    override fun execute() {
        println("fill inside")
    }
}

class Eraser : Command() {
    override fun execute() {
        println("erase")
    }
}

class Canvas {
    private val commands = Stack<Command>()
    private val canceledCommands = Stack<Command>()

    fun draw(cmd: Command) {
        commands.push(cmd)
        if (canceledCommands.isNotEmpty()) canceledCommands.clear()
    }

    fun undo() {
        if (commands.isNotEmpty()) canceledCommands.push(commands.pop())
    }

    fun redo() {
        if (canceledCommands.isNotEmpty()) commands.push(canceledCommands.pop())
    }

    fun show() {
        commands.forEach { it.execute() }
    }
}

fun main() {
    val canvas = Canvas()

    //tools
    val pen = Pen()
    val paintBucket = PaintBucket()
    val eraser = Eraser()
    val rectangle = Shape("rectangle")
    val triangle = Shape("triangle")

    canvas.draw(pen)
    canvas.draw(pen)
    canvas.draw(pen)
    canvas.undo()
    canvas.draw(paintBucket)
    canvas.draw(triangle)
    canvas.draw(eraser)
    canvas.draw(eraser)
    canvas.undo()
    canvas.undo()
    canvas.redo()
    canvas.draw(rectangle)
    canvas.draw(paintBucket)
    canvas.show()
}