请针对每个模式出一个代码示例
时间: 2024-03-01 09:52:49 浏览: 19
好的,以下是针对每个模式的代码示例:
1. 工厂模式:
```python
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
class AnimalFactory:
def create_animal(self, animal_type, name):
if animal_type == "dog":
return Dog(name)
elif animal_type == "cat":
return Cat(name)
else:
return None
factory = AnimalFactory()
my_dog = factory.create_animal("dog", "Buddy")
my_cat = factory.create_animal("cat", "Fluffy")
print(my_dog.speak()) # Output: Woof!
print(my_cat.speak()) # Output: Meow!
```
2. 单例模式:
```python
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
a = Singleton()
b = Singleton()
print(a is b) # Output: True
```
3. 装饰器模式:
```python
def bold(func):
def wrapper(*args):
return "<b>" + func(*args) + "</b>"
return wrapper
def italic(func):
def wrapper(*args):
return "<i>" + func(*args) + "</i>"
return wrapper
@bold
@italic
def hello(name):
return f"Hello, {name}!"
print(hello("John")) # Output: <b><i>Hello, John!</i></b>
```
4. 观察者模式:
```python
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 Observer:
def update(self, message):
pass
class EmailNotifier(Observer):
def update(self, message):
print(f"Sending email notification: {message}")
class SMSNotifier(Observer):
def update(self, message):
print(f"Sending SMS notification: {message}")
subject = Subject()
email_notifier = EmailNotifier()
sms_notifier = SMSNotifier()
subject.attach(email_notifier)
subject.attach(sms_notifier)
subject.notify("New message received!") # Output: Sending email notification: New message received! Sending SMS notification: New message received!
```
5. 策略模式:
```python
class PaymentStrategy:
def pay(self, amount):
pass
class CreditCard(PaymentStrategy):
def __init__(self, card_number, exp_date, cvv):
self.card_number = card_number
self.exp_date = exp_date
self.cvv = cvv
def pay(self, amount):
print(f"Paying {amount} using credit card {self.card_number}...")
class PayPal(PaymentStrategy):
def __init__(self, email, password):
self.email = email
self.password = password
def pay(self, amount):
print(f"Paying {amount} using PayPal account {self.email}...")
class Payment:
def __init__(self, payment_strategy):
self.payment_strategy = payment_strategy
def pay(self, amount):
self.payment_strategy.pay(amount)
credit_card = CreditCard("1234567890123456", "12/25", "123")
paypal = PayPal("john.doe@example.com", "password")
payment1 = Payment(credit_card)
payment2 = Payment(paypal)
payment1.pay(100) # Output: Paying 100 using credit card 1234567890123456...
payment2.pay(200) # Output: Paying 200 using PayPal account john.doe@example.com...
```
希望这些示例能对你有所帮助!