1、上午牛客刷题期间用到inputReadder来读取输入的字符串 用 string中的split方法来分割字符串并用字符串数组来接收 将各个值拆分开来 用double.praseDouble来将string转为double 再用String.format("%.2f",d)来格式化字符串 最后用printf的%s来输出各个值
nowcoder.com/profile/230990826/codeBookDetail?submissionId=402629461
2、String Ioc与Di的学习 IOC即控制反转 将对象的创建权交给外部,今日学习的是用配置文件来实现bean的加入,以及bean之间的依赖 bean的实例化方式有 构造方法、静态工厂、实例工厂、factory bean等方式 依赖注入方式有set方法注入与构造器方式注入 不仅支持引用类型的注入并且支持简单类型的注入
3、Spring容器的学习 容器创建用ClassPathXmlApplicationContext 创建方式有 通过BeanFactory与ApplicationContext创建 BeanFactory是延迟加载 注解开发中@Component注解与@Controller Service Repository是一样的只是为了区分 控制层 业务层和数据层 在纯注解开发中可以通过配置类(加上ComponentScan注解,定义其为配置类的注解是@configuration)替代配置文件来作为容器初始化的参数
4、自动装配注解 @Autowared注解是按类型装配 如果有多个相同类型的bean 可以@Qualifie注解指定来注入某个bean @Resouce注解按名称装配
5、配置文件中的属性抓取 通过在配置类中添加@PropertySource("jdbc.properties") 参数为 文件名加后缀 再从某个类中加入@value("${name}"拿取即可
6、MySql学习,分组用group by 语句 一般用于 根据id 来分组 或者区分各个学校 部门 等 其后可以跟着写Having 用来过滤分组 其后跟着 orderBy 来排序
7、子查询案例
select nick_name FROM sys_user
WHERE dept_id in (SELECT dept_id FROM `sys_dept`
WHERE parent_id = '116')
子查询为首先查出父id为116的部门id有哪些 再根据部门id查询出该部门下有哪些员工(员工名)
可以作为计算字段来使用子查询
设计模式学习: 单一职责原则 交通工具 案例 第一种方式违反单一职责原则 一个类既执行了水上交通工具 又执行了陆地和飞行交通工具 第二种方式写了三个不同的类 分别用来做 飞行 陆地 海上、改动比较大 第三种方式是对类中的方法做区分 改动小
如果代码逻辑比较简单 可以在方法级别遵守单一职责原则
接口隔离原则 :类A通过接口1完成 对接口1的实现类B的依赖 类A只是需要接口1中的某三个方法 而此时接口1中有五个方法 因为A的需要 此时实现类B需要将五个方法都实现 这违反了接口隔离原则 此时 我们应该将接口1拆分为两个接口 接口11与接口12 接口11给类A用 而接口12给其他的类用
改善后:
一个类的依赖应该建立在最小的接口上 ---- 把某类 用得到的方法和用不到的方法拆成小的接口 用自己用得到的方法的接口即可 避免实现某些用不到的方法 按传统方式 上述案例需要各自实现五个方法 而按照接口隔离原则来 只需要各自实现三个方法
依赖倒转原则: 核心是面向接口编程 即不要直接依赖某个实现类 让细节去依赖抽象
案例中 人具有接受信息的方法 传统方式是用接受信息的方法直接依赖 email类 直接实现emai的接收 此时如果人想要接收 微信消息 接收短信消息呢? 那么又要改人的接收信息方法的依赖
而根据依赖倒转原则 应该写一个IReceiver接口 让email实现该接口 如果想要接收微信消息 再写一个微信实现类实现Ireceiver接口即可
依赖倒转可以用三种方式实现开关接口对类型接口(TV,电风扇)的依赖的传递 接口方式(开关中的open方法来接收电视对象) 构造器方式 set方式(将电视对象set到该类的电视属性中 在开关类的open方法中用this.Tv.play来打开电视.) 此处与Spring中的依赖注入方式一致 只是spring没有接口注入 基本是set与构造器注入
A与B之间最好有一个接口来缓冲 使用接口或者抽象类的作用应该是定好规范,尽量不要写太多的细节 依赖倒转原则主要是对 可扩展性的一种要求