1、 设计模式
2、接口
interface.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Date: 2018/12/1
# class Payment:
# def pay(self, money):
# raise NotImplementedError
from abc import ABCMeta, abstractmethod
# 接口
# class Payment(metaclass=ABCMeta):
# # abstract class
# @abstractmethod
# def pay(self, money):
# pass
#
#
# class Alipay(Payment):
# def pay(self, money):
# print("支付宝支付%d元." % money)
#
#
# class WechatPay(Payment):
# def pay(self, money):
# print("微信支付%d元." % money)
#
#
#
# p = WechatPay()
# p.pay(100)
#
# class User:
# def show_name(self):
# pass
#
# class VIPUser(User):
# def show_name(self):
# pass
#
# def show_user(u):
# res = u.show_name()
class LandAnimal(metaclass=ABCMeta):
@abstractmethod
def walk(self):
pass
class WaterAnimal(metaclass=ABCMeta):
@abstractmethod
def swim(self):
pass
class SkyAnimal(metaclass=ABCMeta):
@abstractmethod
def fly(self):
pass
class Tiger(LandAnimal):
def walk(self):
print("老虎走路")
class Frog(LandAnimal, WaterAnimal):
pass
3、面向对象设计SOLID原则
4、设计模式分类
5、创建型模式
1)简单工厂模式
factory.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Date: 2018/12/1
from abc import ABCMeta, abstractmethod
class Payment(metaclass=ABCMeta):
# abstract class
@abstractmethod
def pay(self, money):
pass
class Alipay(Payment):
def __init__(self, use_huabei=False):
self.use_huaei = use_huabei
def pay(self, money):
if self.use_huaei:
print("花呗支付%d元." % money)
else:
print("支付宝余额支付%d元." % money)
class WechatPay(Payment):
def pay(self, money):
print("微信支付%d元." % money)
class PaymentFactory:
def create_payment(self, method):
if method == 'alipay':
return Alipay()
elif method == 'wechat':
return WechatPay()
elif method == 'huabei':
return Alipay(use_huabei=True)
else:
raise TypeError("No such payment named %s" % method)
# client
pf = PaymentFactory()
p = pf.create_payment('huabei')
p.pay(100)
2)工厂方法模式
factory_method.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Date: 2018/12/1
from abc import ABCMeta, abstractmethod
class Payment(metaclass=ABCMeta):
# abstract class
@abstractmethod
def pay(self, money):
pass
class Alipay(Payment):
def __init__(self, use_huabei=False):
self.use_huaei = use_huabei
def pay(self, money):
if self.use_huaei:
print("花呗支付%d元." % money)
else:
print("支付宝余额支付%d元." % money)
class WechatPay(Payment):
def pay(self, money):
print("微信支付%d元." % money)
class BankPay(Payment):
def pay(self, money):
print("银行卡支付%d元." % money)
class PaymentFactory(metaclass=ABCMeta):
@abstractmethod
def create_payment(self):
pass
class AlipayFactory(PaymentFactory):
def create_payment(self):
return Alipay()
class WechatPayFactory(PaymentFactory):
def create_payment(self):
return WechatPay()
class HuabeiFactory(PaymentFactory):
def create_payment(self):
return Alipay(use_huabei=True)
class BankPayFactory(PaymentFactory):
def create_payment(self):
return BankPay()
# client
pf = HuabeiFactory()
p = pf.create_payment()
p.pay(100)
3)抽象工厂模式
abstract_factory.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Date: 2018/12/1
from abc import abstractmethod, ABCMeta
# ------抽象产品------
class PhoneShell(metaclass=ABCMeta):
@abstractmethod
def show_shell(self):
pass
class CPU(metaclass=ABCMeta):
@abstractmethod
def show_cpu(self):
pass
class OS(metaclass=ABCMeta):
@abstractmethod
def show_os(self):
pass
# ------抽象工厂------
class PhoneFactory(metaclass=ABCMeta):
@abstractmethod
def make_shell<