个人计划1–建造者模式
linux命令
watch -n 0.1 nvidia-smi 每隔0.1秒刷新一次nvidia-smi(看英伟达显卡使用情况)
2.sh脚本中的for循环—循环1000次
for k in $( seq 1 1000)
done
3,看python版本:退出ctrl+d
python -v
4.解压tgz文件
tar -xvf cudnn-10.0-linux-x64-v7.3.1.20.tgz
5.查看python进程
ps -ef | grep python
个人计划1–建造者模式
学习自添加链接描述
添加链接描述
主要用处
在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。
解决的问题:
(1)、方便用户创建复杂的对象(不需要知道实现过程)
(2)、代码复用性 & 封装性(将对象构建过程和细节进行封装 & 复用)
实现方式
1.通过Client,Director,Builder和Prodoct形成的建造者模式
2.通过静态内部类方式实现零件无需装配化
3.现在最常用的lombok方法
实现方式1
代码见zhj_design_patterns 的builder_pattern
一般都有如下几个角色:
- 抽象建造者(builder):秒速具体建造者的公共接口,一般用来定义构造细节的方法,并不负责具体对象组件的创建。
- 具体建造者(ConcreteBuilder):实现抽象建造者公共接口。
- 指挥者(Director):调用具体建造者来创建复杂对象的各个部分,并按照一定顺序来构建复杂对象
4.产品(product):描述一个由一系列部件组成较为复杂的对象。
例子–造房子:
假设造房简化为如下步骤:(1)地基(2)钢筋工程(3)铺电线(4)粉刷
如果”要盖一座房子,首先要找一个建筑公司或工程承包商(指挥者)。承包商指挥工人(具体建造者)过来造房子(产品),最后验收。
具体步骤:
1.创建抽象建造者定义造房步骤(定义接口)
2.创建工人具体实现造房步骤(实现接口)
3.创建承包商指挥工人施工(按照顺序实例化)
4.验收
实现方式2
代码见builder_pattern_static_innerClass
优点
通过静态内部类方式实现零件无序装配话构造:案例:Android中的AlertDialog
这种方式使用更加灵活,更符合定义。内部有复杂对象的默认实现,使用时可以根据用户需求自由定义更改内容,并且无需改变具体的构造方式。就可以生产出不同复杂产品
角色
抽象建造者、具体建造者、产品
比第一种方式少了指挥者,主要是因为第二种方式把指挥者交给用户来操作,使得产品的创建更加简单灵活。
例子
麦当劳的套餐,服务员(具体建造者)可以随意搭配任意几种产品(零件)组成一款套餐(产品),然后出售给客户。
具体步骤
1.创建建造者定义麦当劳的产品(抽象构造者)
2.创建服务员实现具体产品(具体构造者)
3.服务员随意搭配套餐出售给客户
在开源框架中的应用
1.在Mybatis中,
// MyBatis配置文件路径
String resources = “mybatis_config.xml”;
// 获取一个输入流
Reader reader = Resources.getResourceAsReader(resources);
// 获取SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开一个会话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 具体操作
…