- 博客(92)
- 收藏
- 关注
原创 设计模式-策略模式
策略模式把一系列算法封装起来,使得他们可相互替换,是的算法可独立与他的客户端而变化from abc import ABCMeta,abstractmethod#抽象策略class Stretrgy(object): __metaclass__ = ABCMeta def excute(self, data): pass#----------------具体策略----------------class FirstStretrgy(Stretrgy): def excute(self
2022-02-17 12:38:47 148
原创 设计模式-行为型模式开端-责任链模式
责任链模式有一个请求,多个对象都有机会处理请求,吧处理对象连成一条链,沿着这个链传递请求,避免发送者和接受者的耦合关系举例from abc import ABCMeta,abstractmethod#抽象处理者class Handler(object): __metaclass__ = ABCMeta @abstractmethod def handle_leave(self, days): pass#----------具体处理者-----------------class G
2022-02-16 15:51:21 254
原创 设计模式-代理模式
代理模式为一个对象提供一种代理,控制这个对这个对象的访问远程代理:如vpn,远程办公,不用管服务器在哪里,.只用操作代理即可,代理会把你的操作反馈到对象中虚代理根据需求创建很大的对象,比如浏览器的无图模式,加入图片很大,你不需要看到,浏览器就会不显示图片,等你需要看图点击了以后才读取图片,节约内存保护代理控制对原始对象的访问,设置权限举例#抽象实体class Subject(object): __metaclass__ = ABCMeta @abstractm
2022-02-16 12:30:36 284
原创 设计模式-外观模式
外观模式为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个高层接口使得子系统更加容易使用举例#--------子系统类-------------class CPU(object): def run(self): print "cpu run" def stop(self): print "cpu stop"class Disk(object): def run(self): print "Disk run" def stop(self): pri
2022-02-16 10:26:35 358
原创 设计模式-组合模式
组合模式将对象组合成树结构,表示"部分-整体"的增次结构 组合模式让client对单个对象和组合对象使用有一致性啥意思呢,举个例子就懂了from abc import ABCMeta,abstractmethod#抽象组件class graphic(object): __metaclass__ = ABCMeta @abstractmethod def draw(self): pass#叶子组件class point(graphic): def __init__(self,x,
2022-02-15 16:16:08 161
原创 设计模式-桥模式
桥模式当事物有两个维度,两个维度都有扩展有些系统耦合度特别高,需要一定程度解耦合举例耦合度高#绘制图形 图形由颜色和形状组成class shape(object): pass#图形class circle(shape): passclass line(shape): passclass redcirle(object): passclass blackcricle(object): pass#.....#颜色和图形耦合在一起,假如要加一
2022-02-14 21:28:38 471
原创 设计模式-结构型模式开端-适配器模式
结构型模式总的来说就是控制几个类组成什么结构,怎么协同工作的模式适配器模式就像type-c转耳机孔,usb转苹果的那些硬件一样,为了让两个不通的设备通用适配器模式就是让两个不能通用的设备通用两种实现方式类适配器:使用多继承对象适配器:使用组合举例类适配器from abc import ABCMeta,abstractmethodclass payment(object): __metaclass__ = ABCMeta @abstractmethod def pay(
2022-02-14 20:52:47 117
原创 设计模式-单例模式&创建型模式总结
单例模式保证一个类只有一个实例例子class Singleton(object): def __new__(cls, *args, **kwargs): #new方法在__init__之前调用,初始化一个类,给类分配空间,给类对象初始化的,__init__是 #给某个属性初始化复制 if not hasattr(cls, "_instance"): #调用object的new方法给继承Singleton的子类初始化一个对象
2022-02-13 14:30:32 257
原创 设计模式-建造者模式
建造者模式主要构建复杂的对象,和抽象工厂类似,建造者模式着重控制构造顺序建造者模式使得对象的构建和表示分离,使同样的构建过程创建不同的表示# encoding: utf-8from abc import ABCMeta, abstractmethodclass phone(object): def __init__(self,shell = None, os = None, cpu = None): self.shell = shell self.os =
2022-02-13 13:39:11 203
原创 设计模式-抽象工厂模式
抽象工厂模式与工厂模式相比,抽象工厂每个具体工厂生产一套产品举例# coding=utf-8from abc import ABCMeta, abstractmethod# 抽象产品class PhoneShell(object): __metaclass__ = ABCMeta def show_shell(self): passclass CUP(object): __metaclass__ = ABCMeta def show_
2022-02-12 13:26:42 190
原创 设计模式-工厂方法模式
工厂方法模式工厂方法模式纠正了简单工厂模式违反的单一职责原则和开闭原则,把工厂类也抽象出来,让抽象类的子类去决定实例化哪个产品例子:from abc import ABCMeta,abstractmethod#抽象产品角色class payment(object): __metaclass__ = ABCMeta @abstractmethod def pay(self,money): pass#具体产品角色class AliPay(payment): def __init_
2022-02-11 15:16:48 249
原创 设计模式-简单工厂模式
简单工厂原则一种创建形设计模式大概意思就是通过一个工厂类来创建对象实例,像工厂生产产品一样举例from abc import ABCMeta,abstractmethod#这个类就是底层和上层的抽象#这个就是抽象class payment(object): __metaclass__ = ABCMeta @abstractmethod def pay(self,money): pass#这两个支付类就是模拟底层的实现逻辑#下面是细节class AliPay(paymen
2022-02-11 14:44:49 259
原创 设计模式-设计原则(SOLID原则)
开放封闭原则类,模块,函数应该对扩展开放,对修改关闭里氏替换原则所有引用基类的地方必须能透明地使用其子类的对象class BaseMent(object): def return_something(self): passclass child(BaseMent): def return_something(self): passdef a_fun(c): res = c.return_something() .....#a_fun中传入一个对象调用return_somet
2022-02-10 11:28:33 469
原创 设计结构的总结-接口
接口为高层调用提供接口,使得高层调用不关心底层的实现,用就完事了class AliPay(object): def pay(self,money,a,b,c): #a,b,c表示可能要用到的参数 passclass WeChatPay(object): def pay(self,money,a,b): pass#如果我们需要调用支付宝的支付接口p = AliPay()p.pay(....)#这里需要了解alipay里面pay的参数以及实现,微信支付同理,会造成后期开发成本的提
2022-02-10 10:40:56 66
原创 pyhton 三目运算符
三目运算符与列表推导式一样,在合适的情况下,可以使代码更加优雅下面的函数表示如果传入的值小于某个值输出b,否则输出adef test_fun(a_num): b_num = 10 if a_num >= b_num: return "a" else: return "b">>> print test_fun(5)b使用三目运算符更加简洁def test_fun(a_num): b_num = 10 return "a" if a_num >=
2021-10-17 13:42:35 102
原创 关于python的列表推导
列表推导列表推导更多的作用是让python变得更加优雅假如,现在一个函数的作用是把传入列表的每个值乘2,并且返回def list_test(a_list): b = [] for i in a_list: i = i*2 b.append(i) return b>>>print list_test(a_list = [1,2,3,4])[2, 4, 6, 8]如果使用列表推导的话会让代码更加优雅def list_test(a_list): b = [i*2
2021-10-17 13:35:28 70
原创 python函数参数的一些整理二:关键字参数(**kwargs)
python函数参数的一些整理二:关键字参数(**kwargs)def print_some(name = None, age = None): print name,age>>>print_some()None None关键字参数在函数里的应用还是很方便的,能试的调用者很清晰的知道传进去的参数是干嘛的,不用再去查阅原函数参数的作用def print_some(name, age, ad): print name,age,add加入没有使用关键字参数,原函数增加参数,
2021-10-17 13:25:45 143
原创 python函数参数的一些整理一:可选未知参数(*arg)
可选的位置参数(*args)现在有一个函数def print_some(message, value_list): if not value_list: print message else: print_list = ",".join(str(x) for x in value_list) print message, print_list用来打印消息和附带的列表,如果只有消息没有列表,调用者也得print_some("d", [])像这样传入空列表调用函数,究极麻烦,怎么优
2021-10-13 19:35:25 360
原创 python 如何向上或者向下取整
pyhthon的除法python3之前比如2.7执行除法操作有两种操作一种是true操作,一种是floor操作如果 x / y 且x,y都是整数,那么这个式子的结果只取结果得整数部分,这是floor除法如果 x / y 且x,y中有一个浮点数,那么结果就会是小数python3的话只有true除法向上,下取整import mathmath.floor(a)//向下取整(地板)m...
2020-02-14 11:15:11 1018
原创 字典遍历时不能修改字典元素
a = {'a' : 1, 'b' : 2, 'c' : 0}for i in a: if a[i] == 0: del a[i]print(a)报错RuntimeError: dictionary changed size during iteration字典在迭代时改变了因为要删除的是值为0的元素所以迭代键的列表就行了for i in list(a.keys()):...
2020-01-20 11:17:38 1414 2
原创 关于Python函数参数中的* **
初学者,不系统,当时看到** *我很难受,说好的告别指针呢??然后一查,哦原来是动态参数失敬失敬**表示参数可以接受多个函数,放入一个元组中 hso****表示接受字典形式导入参数 牛逼例子等会写...
2020-01-17 11:16:29 160
原创 关于Python中的类
写一下加强一下记忆面向对象首先,面向对象编程的概念一定是多加练习才能吃透掌握的首先就是抽象 把要描述的东西抽象出来,在类里描述他的属性,方法然后有了类,就可以创建实例.类就是图纸而实例就是造好的房子Python中的对象包含了ID值还有类型当然面向对象最终要的就是暴露出来的接口,接口使使用者不用关注对象是怎么实现的,只需要接口来访问对象或者修改对象即可当然组合,继承,多态也是很重...
2020-01-16 20:27:40 139
原创 关于进程控制
1.首先是创建进程fork/vforkvfork在fork引入后就被淘汰了开一下虚拟机,man一下fork#include <unistd.h> pid_t fork(void);子进程返回0,父进程返回的是子进程的pid失败返回-1int main( void ){ pid_t pid; printf("Before: pid is ...
2019-08-16 12:28:58 135
原创 Linux中程序地址空间
很早接触到了虚拟地址和虚拟地址空间,今天总结一下首先怎么看虚拟地址空间呢int global = 0;int main(){ pid_t pid = fork(); if(pid < 0){ perror("fork"); return 0; } else if(id == 0){ //child printf("child[%d]: %d : %p\n"...
2019-08-16 10:34:01 113
原创 C++继承的补充
如何写一个无法被继承的类在C++11中,在父类后加finalclass Base final{};但是C++98不行,怎么办呢,我们知道派生类生成自己的对象时会调用基类的构造函数来初始化属于基类的那一部分,那么我们可以把基类的构造函数给成私有的,无法让类外成员调用private: Base() {}但是在主函数或其他函数中还是需要实例化基类的对象,怎么办?class Base...
2019-08-15 16:53:22 77
原创 环境变量
环境变量存储系统运行环境参数的变量比如我们在编写代码是,我也不知道动态库静态库在哪里,但是编译器在链接时可以连接到,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找那么都有哪些常见的环境变量PATH: 指定命令的搜索路径,比如搜索动静态库,也可以理解成程序运行的指定路径HOME : 指定用户的主工作目录(用户登录Liunx是主工作目录)SHELL : 当前Shell,/bin/...
2019-08-15 16:11:32 62
原创 Liunx下进程概念
进程,程序的一个执行实例,正在执行的程序描述进程的是PCB(process control block),进程控制块,本质是个结构体其中包含内存指针(程序的代码和数据内存的什么地方),程序计数器(),上下文数据(即将执行的指令),标识符PID(进程ID),进程状态,进程优先级,记账信息(),IO信息(文件信息)在Liunx下,使用 ps或者ls /proc 系统文件查看在代码中使用 ge...
2019-08-15 11:24:18 111
原创 关于Linux权限的复习
前几天装插件的时候有点忘记文件权限相关的知识了,写一下复习首先权限分三个组u g o10位权限,第一位是文件类型剩下9位每三位便是一个所属组的权限权限r 读w 写x 可执行比如一个文件的权限是r–可以用二进制位标识 为 100 八进制就是4比如 -w-二进制 010 八进制就是2设置的话最简单的可以使用 chmod u+w /home/abc.txt给abc.tx...
2019-08-15 10:29:27 92
原创 关于C++中的继承
继承的子类可以叫叫做子类,派生类被继承的就叫做父类,基类那么继承的作用是什么呢,它是使代码复用的手段,在继承原有类的特性下进行扩展,这也说明了子类逃是没有扩展的话就没有意义了,比如父类可以是人,定义了一个人特有的特性,比如年龄性别等,子类可以是学生,职员,警察等,在人的特性下进行扩充首先来个父类class Person {public: void SetPerson(const st...
2019-08-14 17:40:26 232
原创 关于模板的更多的知识点
之前写了函数模板和类模板,主要就是为了处理多类型的数据还有几个需要注意的首先是非类型模板参数什么是类类型模板参数就是模板中跟在class或者typename之后的参数类型名称非类型模板参数就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。比如namespace bite { template<class T,size_t N> /...
2019-08-14 12:21:15 139
原创 关于string中的浅拷贝问题
模拟实现string时,要是没有显示定义拷贝构造函数,在拷贝构造一个新的对象时,编译器会调用默认的构造函数默认的拷贝构造函数是怎么样的呢String(const char* pStr = " ") :_pStr(new char[strlen(pStr)+1]) { strcpy(_pStr,pStr);}调用这个默认的构造函数会出现一个问题,那就是若是拷贝构造1个对象,比如Str...
2019-08-14 11:36:41 283
原创 static静态类成员
声明为static的成员就是类的静态成员,有静态成员变量和静态成员函数切记静态成员在类外初始化有一道题,问 一个类创建对象的个数静态成员在类中只有一份,被所有类对象共享,所有都可以调用静态成员函数没有this指针,所以不能访问任何非静态成员由于以上静态成员的特性,所以可以解决上面的问题class A{public: A() {++_scount;} A(const A&...
2019-08-13 14:25:30 163
原创 对于初始化列表的一些理解,以及一些小的知识点
class Date { public: Date(int year, int month, int day) : _year(year) , _month(month) , _day(day) , _a(year) , _c(year) { //函数体中是赋值,赋值可以赋值多次 _year = year; _month = month; _da...
2019-08-13 11:44:15 160
原创 stack&queue
stack理解为栈就可以了栈的话先进后出我觉得这个真没啥说的stack<int> s;压栈s.push(x);出栈s.pop(s);还有判空啥的queue理解为队列判空啊插入取出就不说了说说优先级队列priority_queue优先级队列创建出来是按照堆排序来的,默认创建出来是大堆vector<int> v{ 3, 1, 0, 9, 5, ...
2019-08-13 10:26:05 95 1
原创 STL list的使用
list的底层是双向链表结构,回忆一下双向链表的结构,逻辑结构上是连接的,实际上节点存放的地址不是连续的,通过指针链接首先来看构造list<int> L1;list<int> L2(10, 5);//放10个值为5的元素也可以把一个数组中的元素放入list中实质上就以数组为迭代器来区间构造list<int> L3 (L2.begin(),L2.e...
2019-08-06 18:10:34 91
原创 STL vector
vector的底层是可变大小的数组接下来看初始化 vector<int> v1; vector<int> v2(10, 5);//10个元素值为5也可以区间构造,毕竟是数组vector<int> v3(v2.begin(), v2.end());使用上面v2构造v3当然也可以拷贝构造.vector<int> v3(v2);加入...
2019-08-04 22:16:02 78
原创 STL的使用 string
STL是standard template libaray-标准模板库STL中有许多方便的模板,首先来看stringstring顾名思义就是操作字符串的,首先来看他的初始化string s1; //创建空字符串s1string s2("hello world");//创建有内容的字符串string s3(10,'$');//创建一个有10个$的字符串string s4(s3);//使用...
2019-08-03 21:59:33 105
原创 类模板
模板的编译分为两个阶段:1.实例化前–先对模板进行简单的语法检测2.实例化后–编译器就会根据T的实际类型来生成代码接下来给出一个顺序表类来演示一下类的模板template<class T>class SeqList {public: SeqList(size_t capacity = 3)//构造函数,默认容量设置为3 : _array(new T[capacity]...
2019-07-31 17:12:57 109 1
原创 函数模板
如何实现一个通用的加法函数?template<typename T> T Add(T left, T right) { cout << typeid(T).name() << endl; return left + right;}使用template<typename/class ..>来实现,这就是模板编译不能算是一个函数,他就是模...
2019-07-31 16:35:16 78 2
原创 C++中的内存管理
在C/C++程序中的内存分布大概如下内核栈内存映射段堆数据段代码段代码段中存放的是可执行数据和只读常量在程序中,全局变量和静态数据一般在数据段中在堆中,开辟的就是 malloc或者calloc申请的内存空间内存映射段存放的就是文件映射表啊动态库之类的在栈中,存放的是代码中定义的变量,指针在C语言中,使用malloc calloc realloc申请内存空间(回头补充区别)...
2019-07-30 12:34:33 111
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人