Last active
August 23, 2020 10:47
-
-
Save ernestjumbe/747586d9dc097ac72544ad9636603035 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
class EuropeanSocketInterface: | |
def voltage(self): pass | |
def live(self): pass | |
def neutral(self): pass | |
def earth(self): pass | |
# Adaptee | |
class Socket(EuropeanSocketInterface): | |
def voltage(self): | |
return 230 | |
def live(self): | |
return 1 | |
def neutral(self): | |
return -1 | |
def earth(self): | |
return 0 | |
# Target interface | |
class USASocketInterface: | |
def voltage(self): pass | |
def live(self): pass | |
def neutral(self): pass | |
# The Adapter | |
class Adapter(USASocketInterface): | |
__socket = None | |
def __init__(self, socket): | |
self.__socket = socket | |
def voltage(self): | |
return 110 | |
def live(self): | |
return self.__socket.live() | |
def neutral(self): | |
return self.__socket.neutral() | |
# Client | |
class ElectricKettle: | |
__power = None | |
def __init__(self, power): | |
self.__power = power | |
def boil(self): | |
if self.__power.voltage() > 110: | |
print("Kettle on fire!") | |
else: | |
if self.__power.live() == 1 and \ | |
self.__power.neutral() == -1: | |
print("Coffee time!") | |
else: | |
print("No power.") | |
def main(): | |
# Plug in | |
socket = Socket() | |
adapter = Adapter(socket) | |
kettle = ElectricKettle(adapter) | |
# Make coffee | |
kettle.boil() | |
return 0 | |
if __name__ == "__main__": | |
main() |
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
class Director: | |
__builder = None | |
def setBuilder(self, builder): | |
self.__builder = builder | |
def getCar(self): | |
car = Car() | |
# First goes the body | |
body = self.__builder.getBody() | |
car.setBody(body) | |
# Then engine | |
engine = self.__builder.getEngine() | |
car.setEngine(engine) | |
# And four wheels | |
i = 0 | |
while i < 4: | |
wheel = self.__builder.getWheel() | |
car.attachWheel(wheel) | |
i += 1 | |
return car | |
# The whole product | |
class Car: | |
def __init__(self): | |
self.__wheels = list() | |
self.__engine = None | |
self.__body = None | |
def setBody(self, body): | |
self.__body = body | |
def attachWheel(self, wheel): | |
self.__wheels.append(wheel) | |
def setEngine(self, engine): | |
self.__engine = engine | |
def specification(self): | |
print(f"body: {self.__body.shape}") | |
print(f"engine horsepower: {self.__engine.horsepower}") | |
print(f"tire size: {self.__wheels[0].size}\'") | |
class Builder: | |
def getWheel(self): pass | |
def getEngine(self): pass | |
def getBody(self): pass | |
class JeepBuilder(Builder): | |
def getWheel(self): | |
wheel = Wheel() | |
wheel.size = 22 | |
return wheel | |
def getEngine(self): | |
engine = Engine() | |
engine.horsepower = 400 | |
return engine | |
def getBody(self): | |
body = Body() | |
body.shape = "SUV" | |
return body | |
# Car parts | |
class Wheel: | |
size = None | |
class Engine: | |
horsepower = None | |
class Body: | |
shape = None | |
def main(): | |
jeepBuilder = JeepBuilder() # initializing the class | |
director = Director() | |
# Build Jeep | |
print("Jeep") | |
director.setBuilder(jeepBuilder) | |
jeep = director.getCar() | |
jeep.specification() | |
print("") | |
if __name__ == "__main__": | |
main() |
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
class Button(object): | |
html = "" | |
def get_html(self): | |
return self.html | |
class Image(Button): | |
html = "<img></img>" | |
class Input(Button): | |
html = "<input></input>" | |
class Flash(Button): | |
html = "<obj></obj>" | |
class ButtonFactory(): | |
def create_button(self, typ): | |
targetclass = typ.capitalize() | |
return globals()[targetclass]() | |
if __name__ == "__main__": | |
button_obj = ButtonFactory() | |
button = ['image', 'input', 'flash'] | |
for b in button: | |
print(button_obj.create_button(b).get_html()) |
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
import types | |
class StrategyExample: | |
def __init__(self, func = None): | |
self.name = 'Strategy Example 0' | |
if func is not None: | |
self.execute = types.MethodType(func, self) | |
def execute(self): | |
print(self.name) | |
def execute_replacement1(self): | |
print(self.name + 'from execute 1') | |
def execute_replacement2(self): | |
print(self.name + 'from execute 2') | |
if __name__ == '__main__': | |
strat0 = StrategyExample() | |
strat1 = StrategyExample(execute_replacement1) | |
strat1.name = 'Strategy Example 1' | |
strat2 = StrategyExample(execute_replacement2) | |
strat2.name = 'Strategy Example 2' | |
strat0.execute() | |
strat1.execute() | |
strat2.execute() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment