JavaSE基础(day23)(1)设计模式

版权声明:cxyo.cn https://blog.csdn.net/weixin_44075537/article/details/85002197

默写:
1.创建 Class对象的四种方式
2.通过Class 对象 如何创建对应的java类型的实例?
newInstance() 最终调用构造方法
3.如何通过Class 对象获取构造函数类型的对象 如何获得字段类型的对象
如何获取方法类型的对象
getConstructor getDeclaredConstructor getConstructors
getField getDeclaredField getFields
getMethod getDeclaredMethod getMethods
4.Class 对象 获取到方法对象之后 如何调用这个方法
invoke(对象,变长参数)

今日内容:
1.设计模式的设计原则
1.1 开闭原则 (open close principle)
对扩展开放 对修改关闭 (车的电路 尽量不要去改动 如果对预留的接口扩展功能是可以的)
因为修改原来的代码 更容易引入 bug
1.2 里氏代换 (liskvo substitution principle )
任何基类(父类) 出现的地方 都可以使用 派生类 (子类) 替代
子类对象 is a 父类对象
1.3 依赖倒转原则 (Dependence inverse principle)
编程尽量的依赖于 接口 或者 抽象类 而不应该依赖于 具体的实现类
可以给程序带来更大的灵活性

   public  class  AnimalTest{
        public   void    test1(Animal animal){
            //dog.watchHome();
            animal.fun();
        }
   }   

1.4 接口隔离原则(Interface Segregation Principle)
尽量使用小接口 而不要使用一个很大的接口 包含很多功能
可以避免接口污染

   public  Interface  IRun{
        void  run();
   }
   public  Interface  IAttack{
        void  attack();
   }  

1.5、迪米特法则(最少知道原则)(Demeter Principle)
程序设计 尽量遵循 高内聚 低耦合(尽量减少与其它组件的关联 )
1.6 合成复用原则(Composite Reuse Principle)
尽量使用 组合 或者 聚合 而尽量减少使用 继承
组合 两个组件生命期相互依赖 汽车 发送机 人 和 大脑
聚合关系 两个组件生命期关系不强 汽车 has a 收音机
这两个都是 一个 has a

  class  Radio{
      public  void  radio(){
          // 收听广播
      }
  }
  public  class  Car {
      private  Radio  r;
      public  void  play(){
          r.radio();
      }
  }

2.设计模式
2.1 概念
进过前人反复使用,经过反复验证,被多数人认可的,并且分类编目的 一个代码设计经验的总结.
2.2 设计模式的分类
创建型:工厂模式(一个工厂有多条生产线) 抽象工厂模式(一个工厂只有一条生产线) 单例模式 (掌握)
结构型:装饰器模式 代理模式(动态代理) 组合模式 (熟悉)
行为模式: 迭代器模式 观察者模式 模板模式 (了解)

3.查找算法
3.1 线性查找
从前往后 依次对比需要查找的数据 如果找到对应的元素 则返回元素的位置
练习:
设计一个方法 传入一个整数数组 然后传入要查找的数据 返回数据在数组中的位置
如果数组中没有这个数组 则 返回 -1
3.2 二分查找
a.要求数列中的数据 保持有序
b.求出数列中 中间下标 对应的元素 进行比较
c.如果中间下标对应的下标元素 等于 目标元素 则直接返回位置
d.如果中间下标对应的元素 大于 目标元素 左侧重复 b
e.如果中间下标对应的元素 小于 目标元素 则右侧重复 b
f.如果查找完所有的元素 都没有目标元素 则返回 -1
4.排序算法
4.1 冒泡排序
核心思想:相邻的元素进行比较 满足条件 就进行交换 如果一趟排序中没有出现元素交换
则排序完成。

4.2 快速排序
a.记录左右两侧的下标 求出中间下标 和 中间下标对应的值 然后单独保留中间下标对应的值
b.从左侧 依次取出值 直到有一个元素 大于 中间值 就把大的数据 放到 中间下标对应的位置
立即把 中间下标 移动到 有元素移动的位置。
c.如果左侧发生了元素移动 则立即从右侧开始 依次查找比中间元素小的 找到之后 把数据
移动到中间下标所在的位置。并且把中间下标执行到 移动元素的位置。然后重复 b。
d.最终 左侧 中间 和 右侧重合 则把保留的中间 放到重合位置。
e.使用递归处理左右两侧。
视频
javaseday23-1.设计原则
https://v.qq.com/txp/iframe/player.html?vid=g0800nudve3
javaseday23-2.设计模式介绍
https://v.qq.com/txp/iframe/player.html?vid=x0800is8457
javaseday23-3.工厂模式的实现
https://v.qq.com/txp/iframe/player.html?vid=d0800ic7gls
javaseday23-4.线性查找和二分查找
https://v.qq.com/txp/iframe/player.html?vid=x0800zynoy2
javaseday23-5.冒泡排序和快速排序介绍
https://v.qq.com/txp/iframe/player.html?vid=q0800greymj

代码
https://pan.baidu.com/s/1F3kSEgjCESsTHuHm2pTWTg

猜你喜欢

转载自blog.csdn.net/weixin_44075537/article/details/85002197
今日推荐