python实现单例工厂模式

class CarFactory:

    '''python实现单例工厂模式'''

    __obj = None
    __flg_init = True

    def __new__(cls, *args, **kwargs):
        if cls.__obj is None:
            cls.__obj = object.__new__(CarFactory)

        return cls.__obj

    def __init__(self):
        if CarFactory.__flg_init:
            print('工厂产生了')
            CarFactory.__flg_init = False

    def creatCar(self, car_name):

        if car_name == 'Benz':
            car = Benz()

        elif car_name == 'BMW':
            car = BMW()

        else:
            car = BYD()

        return car

class Benz:
    def __init__(self):
        print('奔驰产生了')

class BMW:
    def __init__(self):
        print('宝马产生了')

class BYD:
    def __init__(self):
        print('比亚迪产生了')

cf = CarFactory()
cf2 = CarFactory()

print(cf)
print(cf2)

cf.creatCar('123')

cf2.creatCar('Benz')

原文地址:https://www.cnblogs.com/python99/p/12311886.html

时间: 2024-09-28 02:31:31

python实现单例工厂模式的相关文章

设计模式:简单工厂和单例工厂

1 <?php 2 /** 3 * 纯粹工厂类 4 */ 5 /*class Factory { 6 public static function getOBJ($class_name) { 7 include_once './'.$class_name.'.class.php'; 8 return new $class_name; //可变类 9 } 10 } 11 */ 12 13 /** 14 * cun工厂类 15 */ 16 class Factory { 17 /* 18 生产单例对

面向接口及单例工厂随笔

面向接口及单例工厂 单例工厂是工厂模式的一种,表示生产出的产品为单例产品. ??在上古web开发中,后端是servlet.service.dao这三层.servlet依赖service,service依赖dao,为什么说依赖,因为该层持有另一层的对象: //UserServlet public class UserServlet extends HttpServlet { //一个UserServlet中持有一个UserService的实现类对象 //这里UserService为接口,指向其实现

《连载 | 物联网框架ServerSuperIO教程》- 8.单例通讯模式开发及注意事项

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架ServerSuperIO教程>2.服务实例的配置参数说明 <连载 | 物联网框架ServerSuperIO教程>- 3.设备驱动介绍 <连载 | 物联网框架ServerSuperIO教程>-4.如开发一套设备驱动,同时支持串口和网络通讯. <连载 | 物联网框架ServerSupe

C++实现一个线程安全的单例工厂

我们见到经常有人用 static 局部对象的方式实现了类似单例模式,最近发现一篇文章明确写明 编译器在处理  static局部变量的时候 并不是线程安全的 !!! http://blogs.msdn.com/b/oldnewthing/archive/2004/03/08/85901.aspx 于是实现了一个单例工厂  并且是线程安全的 #ifndef SINGLETONFACTORY_H #define SINGLETONFACTORY_H #include "windows.h"

设计模式之----单体(单例)模式

设计模式之--单体(单例)模式 1.介绍 从本章开始,我们会逐步介绍在JavaScript里使用的各种设计模式实现,在这里我不会过多地介绍模式本身的理论,而只会关注实现.OK,正式开始. 在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象. 2. 简单单体与闭包单体 在JavaS

php : MVC 演示(使用单例工厂)

此例子是MVC的简单应用, 要达到的效果如下: 用户列表: 姓名 年龄 学历 兴趣 出生地 账号创建时间 操作 keen 20 高中 篮球,足球 广东 2016-11-08 10:00:31 删除 andi 30 本科 乒乓球 上海 2016-11-22 10:00:55 删除 ddddddd 40 初中 台球 广州 2016-11-10 12:20:49 删除 eeeeeee 34 大专 慢跑 深圳 2016-11-15 12:21:26 删除 当前用户总数: 4 一.设计表 create t

Singleton(单例)模式和Double-Checked Locking(双重检查锁定)模式

问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能:在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志.那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再delete,不要告诉我你是这么干的.在C++中,可以构造一个日志模块的全局变量,那么在任何地方就都可以用了,是的,不错.但是,我所在的开发部门的C++编码规范是参照Google的编码规范的. 全局变量在项目

PHP设计模式 二 (单例 工厂 注册)

单例模式 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 数据库单例示例: <?php namespace Components; class Database { protected static $db; private function __construct(){ //单列模式

单例/单体模式(Singleton)

首先,单例模式是对象的创建模式之一,此外还包括工厂模式. 单例模式的三个特点: 1,该类只有一个实例 2,该类自行创建该实例(在该类内部创建自身的实例对象) 3,向整个系统公开这个实例接口 Java中大概是这个样子 class Singleton { //私有,静态的类自身实例 private static Singleton instance = new Singleton(); //私有的构造子(构造器,构造函数,构造方法) private Singleton(){} //公开,静态的工厂方