设计模式——工厂模式与单例模式

设计模式是面向对象特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是GOF(Goup of four)23种设计模式。
初学者最常使用的模式 工厂模式和单例模式

23种设计模式

总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

设计模式面向对象特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是GOF(Goup of four)23种设计模式。

在这里插入图片描述

初学者最常使用的模式 工厂模式和单例模式

设计模式—工厂模式

设计模式是面向对象特有的内容,是我们在面临某一类问题时候固定的做法,设计模式有很多种,比较流行的是GOF(Goup of four)23种设计模式。
初学者最常使用的模式 工厂模式和单例模式
工厂模式实现了 使用者和调用者的分离,使用专门的工厂类将选择实现类、创建对象进行统一的管理和控制。

#测试工厂模式

#定义车工厂类
class Carfactory:
    #定义生产汽车的方法
    def creatcar(self,brand):
        if brand=="奔驰":
            return Benz()
        elif brand=="宝马":
            return BMW()
        elif brand=="比亚迪":
            return BYD()
class Benz:
    print("奔驰大G")
class BMW:
    print("宝马X6")
class BYD:
    print("SUV宋")
#创建工厂对象
factory=Carfactory()
c1=factory.creatcar("奔驰")
c2=factory.creatcar("宝马")
c3=factory.creatcar("比亚迪")
print(c1)
print(c2)
print(c3)

在这里插入图片描述

设计模式—单例模式

单例模式的核心作用是确保一个类只有一个实例**,并且提供一个访问该实例的全局访问点。 单例模式只生成一个实例对象,减少了系统资源的开销,当一个对象需要比较多的资源时,比如读取配置文件、产生其它依赖对象时,可以产生一个“单例对象”,永久驻留内存中,极大降低开销。 定义单例时,通常需要重**写 new方法和构造器构造方法

#单例模式
class Mysingleton:
    #这个类创建的单例,通常用属性保存
    object=None
     #加标记,保证初始化一次
    __init_flag=True
    def __new__(cls, *args, **kwargs):
        #cls(当前类对象),判断cls下的属性是否为空
        if cls.object==None:
            #调用obj父类的创建方式,然后传进类
            cls.object=object.__new__(cls)
        return cls.object
    #属性重写
    def __init__(self,name):
        if Mysingleton.__init_flag==True:
            print("初始化")
            Mysingleton.__init_flag=False
            self.name=name
a=Mysingleton("yao")
b=Mysingleton("zeng")
print(a)
print(b)

在这里插入图片描述
内存地址一样,yao,zeng两者是一个对象.

将工厂模式改版为单例模式

class Carfactory:
    object=None
    __init_flag=True
    def creatcar(self,brand):
        if brand=="奔驰":
            return Benz()
        elif brand=="宝马":
            return BMW()
        elif brand=="比亚迪":
            return BYD()
        else:
            return "品牌未知无法创建"
    def __new__(cls, *args, **kwargs):
        if cls.object==None:
            cls.object=object.__new__(cls)
        return cls.object
    def __init__(self):
        if Carfactory.__init_flag==True:
            Carfactory.__init_flag=False
            print("初始化")
class Benz:
    print("奔驰大G")
class BMW:
    print("宝马X6")
class BYD:
    print("SUV宋")
factory=Carfactory()
c1=factory.creatcar("奔驰")
c2=factory.creatcar("宝马")
c3=factory.creatcar("比亚迪")
print(c1)
print(c2)
print(c3)
factory1=Carfactory()
print(factory1)
print(factory)

在这里插入图片描述

PS: 欢迎补充和指正

发布了19 篇原创文章 · 获赞 3 · 访问量 3474

猜你喜欢

转载自blog.csdn.net/qq_43544005/article/details/89444940