天天看点

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

默写:

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