一.单例模式
多次实例化的结果指向同一个实例
#setting.py
IP=1.1.1.2
PORT=3306
1.1单例实现方法一:
import setting
class MySQL:
__isinstace=None
def __init__(self,IP,PORT):
self.IP=IP
self.PORT=PORT
@classmethod
def from_conf(cls):
if cls.__isinstace is None:
cls.__isinstace=cls(setting.IP,setting.PORT)
return cls.__isinstace
obj1=MySQL.from_conf()
obj2=MySQL.from_conf()
obj3=MySQL('1.2.31.1',3306)
print(obj1)
print(obj2)
print(obj3)
单例实现方法二:
def singleton(cls):
__isinstace=cls(setting.IP,setting.PORT)
def wrapper(*args,**kwargs):
if args or kwargs:
obj=cls(*args,**kwargs)
return obj
return __isinstace
return wrapper
@singleton
class MySQL:
def __init__(self,IP,PORT):
self.IP=IP
self.PORT=PORT
obj1=MySQL('1.2.13.',3309)
obj2=MySQL()
obj3=MySQL()
print(obj1)
print(obj2)
print(obj3)
单例实现方法三:
class Mymeta(type):
def __init__(self,class_name,class_bases,class_dic):
self.__instance=self(setting.IP,setting.PORT)
def __call__(self, *args, **kwargs):
if args or kwargs:
obj=self.__new__(self)
self.__init__(obj,*args,**kwargs)
return obj
else:
return self.__instance
class MySQL(metaclass=Mymeta):
def __init__(self,IP,PORT):
self.IP=IP
self.PORT=PORT
obj1=MySQL()
obj2=MySQL()
obj3=MySQL('1.1.1.3',3302)
print(obj1)
print(obj2)
print(obj3)
单例实现方法四:
#singleton.py
import setting
class Foo:
def __init__(self,IP,PORT):
self.IP=IP
self.PORT=PORT
isinstace=Foo(setting.IP,setting.PORT)
def f1():
from singleton import isinstace
print(isinstace)
def f2():
from singleton import isinstace
print(isinstace)
def f3():
from singleton import Foo
obj=Foo('1.2.13.1',3307)
print(obj)
f1()
f2()
f3()
二.网络编程介绍
2.1架构模式
C/S: Client--------基于网络----------Server(客户/服务) B/S: Browser-------基于网络----------Server(浏览器/服务)
2.2服务端遵循原则
1.服务端和客户段都需要有一个稳定的地址,且服务端地址必须固定/绑定
2.对外必须稳定运行,一直提供服务
3.支持并发
2.3网络
建立网络目的是为了数据交互(通信)
建立方法:
-
建立底层通信物理连接介质
-
建立一套统一的通信标准,即互联网协议
2.4互联网协议
可以理解为计算机界的英语
2.5地址组合含义
ip+mac可以标记全世界唯一的一个计算机地址
port可以标记一台计算机上的某一个基于网络通信的应用软件
ip+mac+port可以标记全世界唯一的一个基于网络通信应用软件