• 设计模式


    Date: 2019-05-22

    Author: Sun

    设计模式

    ​ 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。

    ​ 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    常见的面向对象的语言中都会有23种设计模式, 每种设计模式实际解决了一类生活中的问题。

    本节主要讲解的是单例模式,代理模式,工厂模式。

    1 单例模式

    ​ 举个单例模式例子,我们日常使用的电脑上都有一个任务管理器和回收站,在整个操作系统中,任务管理器和回收站只能有一个实例,整个系统都使用这个唯一的实例,而且自行提供自己的实例。

    创建单例--保证只有一个对象

    # 实例化一个单例
    class Singleton(object):
        __instance = None
    
        def __new__(cls, age, name):
            #如果类数字能够__instance没有或者没有赋值
            #那么就创建一个对象,并且赋值为这个对象的引用,保证下次调用这个方法时
            #能够知道之前已经创建过对象了,这样就保证了只有1个对象
            if not cls.__instance:
                cls.__instance = object.__new__(cls)
            return cls.__instance
    
    a = Singleton(28, "runfa")
    b = Singleton(38, "xiaoming")
    
    print(id(a))
    print(id(b))   #a和b的对象地址都指向同一个。
    
    a.age = 19 #给a指向的对象添加一个属性
    print(b.age)#获取b指向的对象的age属性
    

    说明:

    ​ 被上述单例模式类继承的子类也是单例类

    2. 工厂模式

    ​ 工厂模式是一个在软件开发中用来创建对象的设计模式。

    ​ 工厂模式包涵一个超类。这个超类提供一个抽象化的接口来创建一个特定类型的对象,而不是决定哪个对象可以被创建。为了实现此方法,需要创建一个工厂类创建并返回。

    案例分析:

    ​ 我们有一个基类Person ,包涵获取名字,性别的方法 。有两个子类male 和female,可以打招呼。还有一个工厂类。

    ​ 在程序运行期间,用户传递性别给工厂,工厂创建一个与性别有关的对象。因此工厂类在运行期,决定了哪个对象应该被创建。

    # -*- coding: utf-8 -*-
    __author__ = 'sun'
    __date__ = '2019/5/28 16:23'
    
    class Person:
        def __init__(self):
            self.name = None
            self.gender = None
    
        def getName(self):
            return self.name
    
        def getGender(self):
            return self.gender
    
    class MalePerson(Person):
        def __init__(self, name):
            print("Hello xiaoming." + name)
    
    
    class FemalePerson(Person):
        def __init__(self, name):
            print("Hello baby." + name)
    
    class PersonFactory:
        def getPerson(self, name, gender):
            if gender == 'M':
                return MalePerson(name)
            elif gender == 'F':
                return FemalePerson(name)
    
    if __name__ == '__main__':
        factory = PersonFactory()
        person = factory.getPerson("qiangdong", "M")
    

    采用工厂模式,能够使得创建类实例更加的灵活

    说明:

    关于采用python的23种设计模式的内容敬请关注后续课程。

  • 相关阅读:
    Word 转换为 PDf 的技术方案
    [转载]sql server 常用存储过程
    Redmine 初体验
    Quartz.net Tutorial Lesson 1
    [转载]sql server TSQL 区分字符串大小写 的两种方法
    [原创]sql server inner join 效率测试
    java实现树的一般操作
    【转】Mybatis中进行批量更新
    【转载】单例模式的7种写法(整合自两篇文章)
    mybtis批量insert传入参数为list
  • 原文地址:https://www.cnblogs.com/sunBinary/p/10940982.html
Copyright © 2020-2023  润新知