python
def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class Logger:
def __init__(self):
self.log_file = open('log.txt', 'a')
def log(self, message):
self.log_file.write(message + '
')
logger1 = Logger()
logger2 = Logger()
print(logger1 is logger2) # Output: True
python
class Shape:
def draw(self):
pass
class Rectangle(Shape):
def draw(self):
print("Drawing a rectangle")
class Circle(Shape):
def draw(self):
print("Drawing a circle")
class ShapeFactory:
def create_shape(self, shape_type):
if shape_type == "Rectangle":
return Rectangle()
elif shape_type == "Circle":
return Circle()
else:
raise ValueError("Invalid shape type!")
factory = ShapeFactory()
rectangle = factory.create_shape("Rectangle")
circle = factory.create_shape("Circle")
rectangle.draw() # Output: Drawing a rectangle
circle.draw() # Output: Drawing a circle
python
class Observer:
def update(self, message):
pass
class Subject:
def __init__(self):
self.observers = []
def attach(self, observer):
self.observers.append(observer)
def detach(self, observer):
self.observers.remove(observer)
def notify(self, message):
for observer in self.observers:
observer.update(message)
class EmailObserver(Observer):
def update(self, message):
print("Sending email notification:", message)
class SMSObserver(Observer):
def update(self, message):
print("Sending SMS notification:", message)
subject = Subject()
email_observer = EmailObserver()
sms_observer = SMSObserver()
subject.attach(email_observer)
subject.attach(sms_observer)
subject.notify("Hello subscribers!")
# Output: Sending email notification: Hello subscribers!
# Sending SMS notification: Hello subscribers!