python常用的几种设计模式是什么

Python016

python常用的几种设计模式是什么,第1张

python常用的几种设计模式有:1、单例模式,确保某一个类只有一个实例;2、工厂模式,使用一个公共的接口来创建对象;3、策略模式,随着策略对象改变内容;4、门面模式,对子系统的封装,使得封装接口不会被单独提出来。

什么是设计模式?

设计模式是一套被反复使用,多数人知道,经过分类编目的代码设计经验总结。

使用设计模式是为了提高代码可重用性,可阅读性,和可靠性。

你说理解的设计模式有几种?

设计模式又可分为三种:创建型(单例模式)、(工厂模式),结构型,行为型(策略模式)

单例模式以及应用场景:

(1)确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。Windows的Task Manager(任务管理器)、Recycle Bin(回收站)、网站计数器

(2)单例模式应用的场景一般发现在以下条件下:

资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。控制资源的情况下,方便资源之间的互相通信。如线程池等

要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

工厂模式:

提供一个创建对象的接口,不像客户端暴露创建对象的过程,而是使用一个公共的接口来创建对象。

可以分为三种:简单工厂  工厂方法   抽象工厂

一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

策略模式:

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

要点:把一个个策略,也就是算法封装成一个一个类,任意的替换

解决的问题:避免多个if....else带来的复杂

使用场景:系统中需要动态的在集中算法中动态的选择一种,

门面模式:

门面模式也叫外观模式,定义如下:要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式注重“统一的对象”,也就是提供一个访问子系统的接口。门面模式与之前说过的模板模式有类似的地方,都是对一些需要重复方法的封装。但从本质上来说,是不同的。模板模式是对类本身的方法的封装,其被封装的方法也可以单独使用;而门面模式,是对子系统的封装,其被封装的接口理论上是不会被单独提出来用的。

一个对象有很多行为,如果么有选择合适的设计模式,这些行为就需要用多重的条件判断来实现算法的切换,增加了代码的复杂度。

推荐课程:Python面对对象(Corey Schafer)

理解好python类是理解面向对象的编程语言的很重要一部分。首先我们明确一下:

什么是class?简单来说,class是数据和函数有逻辑的组合。所谓逻辑的组合指的是数据和class里的函数都是息息相关的。所以class “can be thought of as blueprints for creating objects”。 这里我举一个简单的例子:

class Customer(object):

    """A customer of ABC Bank with a checking account. Customers have the    following properties:    Attributes:        name: A string representing the customer's name.        balance: A float tracking the current balance of the customer's account.    """

    def __init__(self, name, balance=0.0):

        """Return a Customer object whose name is *name* and starting        balance is *balance*."""

        self.name = name

        self.balance = balance

    def withdraw(self, amount):

        """Return the balance remaining after withdrawing *amount*        dollars."""

        if amount > self.balance:

            raise RuntimeError('Amount greater than available balance.')

        self.balance -= amount

        return self.balance

    def deposit(self, amount):

        """Return the balance remaining after depositing *amount*        dollars."""

        self.balance += amount

        return self.balance

所以我们可以看到,class里面重要的两个元素: Attributes and Methods。因为我们需要理清楚这两者之间的关系。Attribute就是这个属于这个class 的对象的属性。比如这个例子里的名字(name)和余额(balance)。基于这些属性的对象,我们定义了方法取钱(withdraw)和存钱(deposit)。所以整个class就显得非常清晰了。

除此之外,当class复杂起来的时候,我们还需要考虑比如哪些methods是static的;以及有没有必要建立abstract base class让我们去inherit。

纯手码 希望对你有帮助!

1.基类简化了程序,使得程序的累赘部分减少,使程序简洁。

比如,在不用基类的情况下,程序中你要设计一个鸭子类和一个鹅类,他们的成员变量都有头,羽毛,双脚,成员函数有喊叫,飞行等,那么你每写一个类都得重写一下。如果有个基类是鸟类,那么鸭子类和鹅类直接继承这个基类,然后把他们独有的特征加进类里面就行了。

2.易于派生出其他类。