Protection Proxy Pattern in kotlin

The Proxy Pattern is used to create a representative object that controls access to another object, which may be remote, expensive to create or in need of being secured.

One reason for controlling access to an object is to defer the full cost of its creation and initialization until we actually need to use it. Another reason could be to act as a local representative for an object that lives in a different JVM.

The Proxy can be very useful in controlling access to the original object, especially when objects should have different access rights.

In the Proxy Pattern, a client does not directly talk to the original object, it delegates it calls to the proxy object which calls the methods of the original object.

The important point is that the client does not know about the proxy, the proxy acts as an original object for the client.

interface File {
    fun read(name: String)

class NormalFile : File {
    override fun read(name: String) = println("Reading file: $name")

class SecuredFile : File {
    val normalFile = NormalFile()
    var password: String = ""

    override fun read(name: String) {
        if (password == "secret") {
            println("Password is correct: $password")
        } else {
            println("Incorrect password. Access denied!")

fun main(args: Array<String>) {
    val securedFile = SecuredFile()"")

    securedFile.password = "secret""")
Comment / Suggestion Section
Point our Mistakes and Post Your Suggestions