day 30
今日内容:
单例模式的四种方法
网络编程的介绍
单例模式:
什么是单例模式?
单例模式就是经过多次实例化,指向的是同一实例
为何要用单例模式?
可以节省内存资源
如何用单例模式?
方式一:利用绑定方法
文件q
###############################
ip = '1.1.1.1'
port = 8080
###############################
###############################
import q
class SQL:
instance = None
def __init __(self,ip,port)
self.ip = ip
self.port = port
@classmethod
def func(cls)
if not cls.instance:
cls.instance = cls(q.ip,q.port)
return cls.instance
obj1 = SQL.func()
obj2 = SQL.func()
obj3 = SQL.func()
print(obj1)
print(obj2)
print(obj3)
###############################
方式二:利用装饰器
##################################
def func(cls)
instance = cls(q.ip,q.port)
def wrapper(*args,**kwargs):
if args or kwargs:
res = cls(*args,**kwargs)
return res
else:
return instance
return wrapper
@func
class SQL:
def __init__(self,ip,port):
self.ip = ip
self.port = port
obj1 = SQL()
obj2 = SQL()
obj3 = SQL()
print(obj1)
print(obj2)
print(obj3)
###################################
方式三:利用元类
###################################
import q
class Mymate(type):
def __init__(self,class_name,class_class,class_dic)
self.instance = self
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 SQL(metaclass = Mymate):
def __init__(self,ip,port):
self.ip = ip
self.port = port
obj1 = SQL()
obj2 = SQL()
obj3 = SQL()
print(obj1)
print(obj2)
print(obj3)
###################################
方式四:利用模块导入
文件:singleton
###################################
import q
class SQL:
def __init__(self,ip,port):
self.ip = ip
self.port = port
instance = SQL(q.ip,q.port)
###################################
###################################
import singleton
obj1 = singleton.instance
obj2 = singleton.instance
obj3 = singleton.instance
print(obj1)
print(obj2)
print(obj3)
###################################
网络编程之OSI七层介绍:
1、目标:编写一个C/S架构的软件
C/S:client-----------基于网络-------------Sever
B/S:browser----------基于网络-------------Sever
2、服务端需要遵循的原则:
1、服务端与客户端都需要有唯一的地址,但是服务端的地址必须固定/绑定
2、对外一直提供服务,稳定运行
3、服务端应该支持并发
3、网络
网络建立的目的是为数据交互(通信)
如何实现通信:
1.建立好底层的物理连接介质
2.有一套统一的通信标准,称之为互联网协议 4、互联网协议:就是计算机界的英语
OSI七层协议
物理层:电信号
数据链路层:MAC地址
网络层:IP地址
传输层:port端口号
应用层:程序员自己写的协议或者是统一的协议
ip+mac可以标识全世界范围内独一无二的一台计算机的位置
port可以标识一台计算机之上唯一的一个基于网络通信的应用软件
ip+mac+port:可以标识全世界范围内独一无二的一个应用软件(基于网络通信)
day 30的更多相关文章
- 总结30个CSS3选择器
或许大家平时总是在用的选择器都是:#id .class 以及标签选择器.可是这些还远远不够,为了在开发中更加得心应手,本文总结了30个CSS3选择器,希望对大家有所帮助. 1 *:通用选择器 ;; ...
- 值得收藏!国外最佳互联网安全博客TOP 30
如果你是网络安全从业人员,其中重要的工作便是了解安全行业的最新资讯以及技术趋势,那么浏览各大安全博客网站或许是信息来源最好的方法之一.最近有国外网站对50多个互联网安全博客做了相关排名,小编整理其中排 ...
- CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率
CSharpGL(30)用条件渲染(Conditional Rendering)来提升OpenGL的渲染效率 当场景中有比较复杂的模型时,条件渲染能够加速对复杂模型的渲染. 条件渲染(Conditio ...
- 30分钟学会XAML
1.狂妄的WPF 相对传统的Windows图形编程,需要做很多复杂的工作,引用许多不同的API.例如:WinForm(带控件表单).GDI+(2D图形).DirectX API(3D图形)以及流媒体和 ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- ViEmu 3.6.0 过期 解除30天限制的方法
下载:链接: http://pan.baidu.com/s/1c2HUuWw 密码: sak8 删除下面2个地方 HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{B9CDA4 ...
- AlloyTouch全屏滚动插件发布--30秒搞定顺滑H5页
原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/AlloyTouch-FullPage-Plugin 先验货 插件代码可以在这里找到. 注意,虽然是 ...
- C#求斐波那契数列第30项的值(递归和非递归)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)
前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...
- 精选30道Java笔试题解答
转自:http://www.cnblogs.com/lanxuezaipiao/p/3371224.html 都 是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我 ...
随机推荐
- Parcel + Vue 2.x 极速零配置打包体验
继 Browserify.Webpack 之后,又一款打包工具 Parcel 横空出世 Parcel.js 的官网有这样的自我介绍 “极速零配置Web应用打包工具” 简单接触了一下,单从效率上来说,确 ...
- python-解释器模式
源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 解释器模式在面向对象语言实现的编译器中得到了广泛的应用.但是此模式进适用于建大的 ...
- [Android] Linux下JNI简单实现过程
大概梳理了一下JNI的过程: start->先写好A.java文件,里面添加native方法B,调用库C.so->编译成.class文件->用javac生成.h文件,文件包含Java ...
- 《细说PHP》第二版--读书笔记
第五章 PHP的基本语法 5.2.4 在程序中使用空白的处理 5.3 变量 5.3.1 变量的声明 在php中变量的声明必须是使用一个$符号,后面跟变量名来表示 unset()函数释放指定变量 iss ...
- 基于MD5的增强型摘要算法
message-digest algorithm 5(信息-摘要算法),md5的长度,默认为128bit,也就是128个0和1的二进制串.但是,这样表达是很不友好的,所以将二进制转成了16进制,每4个 ...
- python 多进程、多线程
1.多线程: 下面讲一个简单用法,这个模块比较简单,但是实际使用中会遇到很多坑 from multiprocessing import process def go(s): print "主 ...
- Ionic模版的使用
Hybird HTML5 App(移动应用开发)之4.Ionic模版的使用 在Windows系统下使Ionic模版,可以使用之前安装的Git工具中的Git Bash.在Mac系统中可以直接使用系统自带 ...
- 从零起步做到Linux运维经理,你必须管好的23个细节
不想成为将军的士兵,不是好士兵-拿破仑 如何成为运维经理?成为运维经理需要什么样的能力?我想很多运维工程师都会有这样的思考和问题. 如何成为运维经理.一般来说,运维经理大概有两种出身,一种是从底层最基 ...
- PyQt5--CustomizeSignal
# -*- coding:utf-8 -*- ''' Created on Sep 14, 2018 @author: SaShuangYiBing Comment: This example is ...
- 【js】实现继承的6种方法
1.原型链 基本思想:利用原型链让一个引用类型继承另一个引用类型的属性和方法. 让原型对象(B.prototype)等于另一个类型的实例(new A()), 即B.prototype = new A( ...