Skip to content

Instantly share code, notes, and snippets.

@skatesham
Created November 26, 2021 07:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skatesham/d4bd5111f16a177fc1d0376ad718d591 to your computer and use it in GitHub Desktop.
Save skatesham/d4bd5111f16a177fc1d0376ad718d591 to your computer and use it in GitHub Desktop.
Server chalenge gof
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
base = [
{
"type": "Creational Design Patterns",
"patterns": [
"Abstract Factory. Allows the creation of objects without specifying their concrete type.",
"Builder. Uses to create complex objects.",
"Factory Method. Creates objects without specifying the exact class to create.",
"Prototype. Creates a new object from an existing object.",
"Singleton. Ensures only one instance of an object is created.",
]},
{
"type": "Structural Design Patterns",
"patterns": [
"Adapter. Allows for two incompatible classes to work together by wrapping an interface around one of the existing classes.",
"Bridge. Decouples an abstraction so two classes can vary independently.",
"Composite. Takes a group of objects into a single object.",
"Decorator. Allows for an object’s behavior to be extended dynamically at run time.",
"Facade. Provides a simple interface to a more complex underlying object.",
"Flyweight. Reduces the cost of complex object models.",
"Proxy. Provides a placeholder interface to an underlying object to control access, reduce cost, or reduce complexity.",
]
},
{
"type": "Behavior Design Patterns",
"patterns": [
"Chain of Responsibility. Delegates commands to a chain of processing objects.",
"Command. Creates objects which encapsulate actions and parameters.",
"Interpreter. Implements a specialized language.",
"Iterator. Accesses the elements of an object sequentially without exposing its underlying representation.",
"Mediator. Allows loose coupling between classes by being the only class that has detailed knowledge of their methods.",
"Memento. Provides the ability to restore an object to its previous state.",
"Observer. Is a publish/subscribe pattern which allows a number of observer objects to see an event.",
"State. Allows an object to alter its behavior when its internal state changes.",
"Strategy. Allows one of a family of algorithms to be selected on-the-fly at run-time.",
"Template Method. Defines the skeleton of an algorithm as an abstract class, allowing its sub-classes to provide concrete" "behavior.",
"Visitor. Separates an algorithm from an object structure by moving the hierarchy of methods into one object.",
]
}
]
from random import choice
def chooseChalenge(base):
typeChoice = choice(base)
patternType = typeChoice["type"]
pattern = choice(typeChoice["patterns"])
return patternType, pattern
def chalenge():
return chooseChalenge(base)
source = "https://springframework.guru/gang-of-four-design-patterns/"
hostName = "localhost"
hostPort = 9000
class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
gofType, pattern = chalenge()
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(bytes("<html><head><title>Title goes here.</title></head>", "utf-8"))
self.wfile.write(bytes("<p>Type: %s</p>" % gofType, "utf-8"))
self.wfile.write(bytes("<p>Pattern: %s</p>" % pattern, "utf-8"))
self.wfile.write(bytes("</body></html>", "utf-8"))
myServer = HTTPServer((hostName, hostPort), MyServer)
print(time.asctime(), "Server Starts - %s:%s" % (hostName, hostPort))
try:
myServer.serve_forever()
except KeyboardInterrupt:
pass
myServer.server_close()
print(time.asctime(), "Server Stops - %s:%s" % (hostName, hostPort))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment