Created
November 25, 2020 19:56
-
-
Save btdrawer/84f6426343962dd0b5d5362de4274a9b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object ScalaWorkshopExample extends App { | |
class User(val name: String) { | |
def greet(): Unit = println(s"Hi, my name is $name") | |
} | |
class Message(val sender: User, val content: String) | |
abstract class Chat(val members: List[User], val messages: List[Message]) { | |
def printMessages(): Unit = messages.foreach(m => | |
println(s"Sender: ${m.sender.name}, message: ${m.content}") | |
) | |
def getUserMessages(user: User): List[Message] = | |
messages.filter(_.sender == user) | |
def sendMessage(message: Message): Chat | |
} | |
class GroupChat(val name: String, override val members: List[User], override val messages: List[Message]) | |
extends Chat(members, messages) { | |
override def sendMessage(message: Message): Chat = new GroupChat(name, members, messages :+ message) | |
} | |
class DirectChat(override val members: List[User], override val messages: List[Message]) | |
extends Chat(members, messages) { | |
override def sendMessage(message: Message): Chat = new DirectChat(members, messages :+ message) | |
} | |
trait Encrypted { | |
def encrypt(message: Message): Message = new Message( | |
message.sender, | |
message.content.replaceAll("/n/g", "l") | |
) | |
} | |
class EncryptedDirectChat(override val members: List[User], override val messages: List[Message]) | |
extends DirectChat(members, messages) with Encrypted | |
object AdminMethods { | |
def deleteGroupChat(chat: GroupChat): Unit = ??? | |
} | |
implicit def fromStringToUser(name: String): User = new User(name) | |
"Ben".greet() // new User("Ben").greet() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment