From c8fd9f3a0d6db31743b58d623a78701c9f4ca008 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 4 Oct 2015 03:06:11 +0530 Subject: [PATCH] Monostate pattern #85 --- monostate/etc/MonoState.ucls | 53 ++++++++++++++++++ monostate/etc/monostate.png | Bin 0 -> 16526 bytes monostate/index.md | 28 +++++++++ monostate/pom.xml | 18 ++++++ .../main/java/com/iluwatar/monostate/App.java | 11 ++++ .../com/iluwatar/monostate/LoadBalancer.java | 39 +++++++++++++ .../java/com/iluwatar/monostate/Request.java | 10 ++++ .../java/com/iluwatar/monostate/Server.java | 21 +++++++ 8 files changed, 180 insertions(+) create mode 100644 monostate/etc/MonoState.ucls create mode 100644 monostate/etc/monostate.png create mode 100644 monostate/index.md create mode 100644 monostate/pom.xml create mode 100644 monostate/src/main/java/com/iluwatar/monostate/App.java create mode 100644 monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java create mode 100644 monostate/src/main/java/com/iluwatar/monostate/Request.java create mode 100644 monostate/src/main/java/com/iluwatar/monostate/Server.java diff --git a/monostate/etc/MonoState.ucls b/monostate/etc/MonoState.ucls new file mode 100644 index 000000000..76b48ad0f --- /dev/null +++ b/monostate/etc/MonoState.ucls @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/monostate/etc/monostate.png b/monostate/etc/monostate.png new file mode 100644 index 0000000000000000000000000000000000000000..273fa95459d4d0853c58bfa25cb6e1117fd48032 GIT binary patch literal 16526 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 lB1^Ap5DW=7cfNYWCnbDHap(Cm_ + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.6.0 + + monostate + + + junit + junit + test + + + diff --git a/monostate/src/main/java/com/iluwatar/monostate/App.java b/monostate/src/main/java/com/iluwatar/monostate/App.java new file mode 100644 index 000000000..a96895126 --- /dev/null +++ b/monostate/src/main/java/com/iluwatar/monostate/App.java @@ -0,0 +1,11 @@ +package com.iluwatar.monostate; + +public class App { + public static void main(String[] args) { + LoadBalancer loadBalancer1 = new LoadBalancer(); + LoadBalancer loadBalancer2 = new LoadBalancer(); + loadBalancer1.serverequest(new Request("Hello")); + loadBalancer2.serverequest(new Request("Hello World")); + } + +} diff --git a/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java b/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java new file mode 100644 index 000000000..29a101b81 --- /dev/null +++ b/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java @@ -0,0 +1,39 @@ +package com.iluwatar.monostate; + +import java.util.ArrayList; +import java.util.List; + +public class LoadBalancer { + private static List servers = new ArrayList<>(); + private static int id = 0; + private static int lastServedId = 0; + + static { + servers.add(new Server("localhost", 8081, ++id)); + servers.add(new Server("localhost", 8080, ++id)); + servers.add(new Server("localhost", 8082, ++id)); + servers.add(new Server("localhost", 8083, ++id)); + servers.add(new Server("localhost", 8084, ++id)); + } + + public final void addServer(Server server) { + synchronized (servers) { + servers.add(server); + } + + } + + public final int getNoOfServers() { + return servers.size(); + } + + public void serverequest(Request request) { + if (lastServedId >= servers.size()) { + lastServedId = 0; + } + Server server = servers.get(lastServedId++); + server.serve(request); + } + + +} diff --git a/monostate/src/main/java/com/iluwatar/monostate/Request.java b/monostate/src/main/java/com/iluwatar/monostate/Request.java new file mode 100644 index 000000000..c57072a21 --- /dev/null +++ b/monostate/src/main/java/com/iluwatar/monostate/Request.java @@ -0,0 +1,10 @@ +package com.iluwatar.monostate; + +public class Request { + public final String value; + + public Request(String value) { + super(); + this.value = value; + } +} diff --git a/monostate/src/main/java/com/iluwatar/monostate/Server.java b/monostate/src/main/java/com/iluwatar/monostate/Server.java new file mode 100644 index 000000000..43be5300b --- /dev/null +++ b/monostate/src/main/java/com/iluwatar/monostate/Server.java @@ -0,0 +1,21 @@ +package com.iluwatar.monostate; + +public class Server { + public final String host; + public final int port; + public final int id; + public Server(String host, int port, int id) { + this.host = host; + this.port = port; + this.id = id; + } + public String getHost() { + return host; + } + public int getPort() { + return port; + } + public final void serve(Request request) { + System.out.println("Server ID "+id + " processed request with value "+request.value); + } +}