• 23种设计模式的几种常见的设计模式


    单例模式

    单利实现

    class one(object):
        _instants=None		#创建一个标记
        from threading import Lock		#导入
        lock=Lock()				#实例化锁
        def __new__(cls, *args, **kwargs):   #构建函数
            if not cls._instants:		#判断,如果没有构建空间
                with cls.lock:			
                    cls._instants=super().__new__(cls)	#使用其父类空间
            return cls._instants	#并修改标记
        def __init__(self,name,age):
            self.name=name
            self.age=age
    
    ret=one('luyi',18)
    ret2=one('luer',18)
    print(ret.name)
    print(ret2.name)
    
    
    思想:通过判断标记是否为NONE  来判断是否构建了空间,如果没有构建就使用父类的空间,如果构建了空间,则使用构建的空间(所以使用的一直是父类的空间)
    

    单例模式是什么

    单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
    
    比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下。事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象
    

    工厂模式

    工厂模式应用场景

    用户不需要知道创建什么样的类。
    当你想要创建一个可扩展的关联在创建类与支持创建对象的类之间
    

    工厂模式例子

    我们有一个基类Person ,包涵获取名字,性别的方法 。(如果不实现方法就报错)
    有两个子类male 和female,可以打招呼。
    还有一个工厂类。
     工厂类有一个方法名getPerson有两个输入参数,名字和性别。
     用户使用工厂类,通过调用getPerson方法。
     
     在程序运行期间,用户传递性别给工厂,工厂创建一个与性别有关的对象。因此工厂类在运行期,决定了哪个对象应该被创建
    
    class Person:
        def __init__(self):
            self.name = None
            self.gender = None
    
        def getName(self):
            return self.name
    
        def getGender(self):
            return self.gender
    
    class Male(Person):
        def __init__(self, name):
            print "Hello Mr." + name
    
    class Female(Person):
        def __init__(self, name):
            print "Hello Miss." + name
    
    class Factory:
        def getPerson(self, name, gender):
            if gender == ‘M':
                    return Male(name)
            if gender == 'F':
                return Female(name)
    
    
    if __name__ == '__main__':
        factory = Factory()
        person = factory.getPerson("Chetan", "M")
    

    工厂模式的好处

    当程序运行输入一个“类型”的时候,需要创建于此相应的对象。这就用到了工厂模式。在如此情形中,实现代码基于工厂模式,可以达到可扩展,可维护的代码。当增加一个新的类型,不在需要修改已存在的类,只增加能够产生新类型的子类。
    

    工厂模式在django中的实例

    Django  settings 配置文件中的中间件以及所有以字符串格式的配置。都是通过导入importlib模块后通过反射导入。
    这是工厂模式里的抽象工厂!!!
    

    建造者模式

    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    
    相关模式:思路和模板方法模式很像,模板方法是封装算法流程,对某些细节,提供接口由子类修改,建造者模式更为高层一点,将所有细节都交由子类实现
    
    一个例子更能很好的理解以上的内容:
    
    1. 有一个接口类,定义创建对象的方法。一个指挥员类,接受创造者对象为参数。两个创造者类,创建对象方法相同,内部创建可自定义
    
    2.一个指挥员,两个创造者(瘦子 胖子),指挥员可以指定由哪个创造者来创造
    
    

    修饰器模式

    该模式虽名为修饰器,但这并不意味着它应该只用于让产品看起来更漂亮。修饰器模式通常用于扩展一个对象的功能。
    
    def z_warper(s):
        def warper(func):
            def inner(*args,**kwargs):
                import time
                start_time=time.time()
                ret=func(*args,**kwargs)
                print('运行时间减一秒为:',time.time()-start_time-s,'秒')
                return ret
            return inner
        return warper
    
    @z_warper(1)
    def fuc():
        print("aaaa")
        return 'aaa'
    
    fuc()
    
    通过带参数的装饰器,在不改变函数本身的同时。给函数增加一个运行时间减1的功能
    

    外观模式

    外观模式又叫做门面模式。在面向对象程序设计中,解耦是一种推崇的理念。但事实上由于某些系统中过于复杂,从而增加了客户端与子系统之间的耦合度。例如:在家观看多媒体影院时,更希望按下一个按钮就能实现影碟机,电视,音响的协同工作,而不是说每个机器都要操作一遍。这种情况下可以采用外观模式,即引入一个类对子系统进行包装,让客户端与其进行交互。
    
    外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。
    
  • 相关阅读:
    特效导航栏
    json基础用法
    CSS盒模型以及如何解决边距重叠问题
    JS设置和获取盒模型的宽和高
    太极图
    JS旋转和css旋转
    正则表达式三-元字符
    正则表达式语法二-量词
    逻辑运算符
    字符串和正则的相关方法
  • 原文地址:https://www.cnblogs.com/luyi84895838/p/11958528.html
Copyright © 2020-2023  润新知