设计模式与面向对象

本文详细介绍了设计模式的概念,包括接口、面向对象设计的SOLID原则,并分类阐述了创建型、结构型和行为型设计模式,如简单工厂、工厂方法、抽象工厂等,以及它们各自的优缺点和应用场景。
摘要由CSDN通过智能技术生成

1. 设计模式

对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。每一个设计模式系统的命名、解释和评价了面向对象系统中一个总要的和重复出现的设计。

 

 

2. 接口

若干抽象方法的集合

作用:限制实现接口的类必须实现接口给定的调用方式实现这些方法;对高层模块隐藏了类的内部实现。

例:

# 方式一:raise NotImplementedError, 必须重写方法,但如果不调用该方法,则不会报错
class Payment(object):
    def pay(self, money):
        raise NotImplementedError
    

class Alipay(Payment):
    def pay(self, money):
        pass

# 方式二:抽象类,必须重写方法,且必须实现具体的代码
from abc imort ABCMeta, abstractmethod
class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass

class WechatPay(Payment):
    def pay(self, money):
        

 

 

3. 面向对象设计SOLID原则

  • 开放封闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
  • 里氏替换原则:所有引用父类的地方必须能透明地使用其子类的对象。
  • 依赖倒置原则:高层模型不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程。
  • 接口隔离原则:使用多个专门的接口,而不是用单一的总接口,即客户端不应该依赖那些它不需要的接口。
  • 单一职责原则:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

 

 

4. 设计模式分类

创建型模式(5种):工厂方法模式、抽象工厂模式、创建者模式、原型模式、单例模式

结构型模式(7种):适配器模式、桥模式、组合模式、装饰模式、外观模式、享元模式、代理模式

行为型模式(11种):解释器模式、责任链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式、模板方法模式

 

 

5. 简单工厂模式

不直接向客户端爆率对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。

1)角色:

工厂角色(Creator)

抽象产品角色(Product)

具体产品角色(Concrete Product)

 

2)案例:

from abc imort ABCMeta, abstractmethod
class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass

class WechatPay(Payment):
    def pay(self, money):
        print("微信支付")

class AliPay(Payment):
    def pay(self, money):
        print("支付宝支付")

class PaymentFactory:
    def create_payment(self, method):
        if method == "alipay":
            return AliPay()
        elif method == "wechat":
            return WechatPay()
        else:
            raise TypeError("无此支付方式" % method)

 

3)优点:

  • 隐藏了对象创建的实现细节
  • 客户端不需要修改代码

 

4)缺点:

  • 违反了单一职责原则,将创建逻辑集中到一个工厂类里
  • 当添加新产品时,需要修改工厂类代码,违法呢开闭原则

 

 

6. 工厂方法模式

定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个产品类

 

1)角色:

抽象工厂角色(Creator)

具体工厂角色(Concrete Creator)

抽象产品角色(Product)

具体产品角色(Concreate Product)

 

例:

class PaymentFactory(metaclass=ABCMeta):
    @abstractmethod
    def create_payment(self):
        pass


class AliPayFactory(PaymentFactory):
    def create_payment(self):
        return AliPay()

def WechatPayFactory(PaymentFactory):
    def create_payment(self):
        return WechatPay()

 

2)优点:

  • 每个具体产品都对应一个具体工厂类,不需要修改工厂类代码
  • 隐藏了对象创建的实现细节

 

3)缺点:

  • 每增加一个具体产品类,就必须增加一个相应的具体工厂类

 

 

7. 抽象工厂模式

定义一个工厂类接口,让工厂子类来创建一系列相关或相互依赖的对象。

相比工厂方法模式,抽象工厂模式中的每个具体工厂都生产一套产品。

 

1)角色

  • 抽象工厂角色(Creator)
  • 具体工厂角色(Concreate Creator)
  • 抽象产品角色(Product)
  • 具体产品角色(Concrete Product)
  • 客户端(Client)

 

例:


                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值