迫于找工作,重温一下设计模式和设计原则

提到java设计模式,就得先说说它们的六大原则

  1. 依赖倒置原则:核心思想是面对接口编程,主要解决高层代码模块(例如controller层)对底层原子性代码模块(例如与数据库交互的操作,model层)的依赖问题,也就是底层模块 是基于对接口申明的功能的实现。好处是用底层模块去实现接口,不同的实现方式可以通过接口对象指向不同的实现类对象来达到降低对高层模块的修改。
  2. 接口隔离原则:接口的设计应当尽量细化但也不能过于糅杂,尽量细化以解决接口中声明方法过多导致其实现类需要实现该类不包含的功能模块,不要过度细化是为了防止接口过多而导致编程复杂。
  3. 单一职责原则:强调一个类只用于实现一个具体的职责,用于解决类中存在两个模块,对其中一个修改导致另一个出现异常的情况,但是随着今后可能出现的模块细分,这条原则也有可能被打破,条件是即使模块划分也足够简单。
  4. 开闭原则:定义为一个软件的实体应该对拓展开放,对修改关闭。任何针对一个开发完成的项目的修改都是高风险的,错误可能随之而来,所以,面对软件需要有所改变时,应当通过拓展的方式来修改,而不是在原来代码上修改,这条原则,可以说是六大设计原则的总纲。
  5. 迪米特原则:定义为一个对象应当对其他对象保持最少的了解,从而减少类之间的依赖关系,从而降低耦合。
  6. 里氏替换原则:主要运用在继承中,父类中已经实现的方法,子类最好不要重写该方法,即子类在拓展父类的功能时,不要改变父类原有的功能。

设计模式

一.创建型模式
  1. 工厂模式:根据抽象程度可以分为 静态工厂模式,工厂方法模式以及抽象工厂模式。静态工厂模式指创建一个工厂类,类中创建一个工厂方法,用于创建相关对象并返回,而工厂方法模式就比静态工厂方法多一个工厂类接口,具体实现中,创建工厂接口类F,工厂实现类F1,需要工厂创建的类接口P以及该接口的实现类P1,通过创建F 的对象而访问创建P对象的方法,从而返回(创建)P的实例,主要是为了达到降低耦合的目的运用到了迪米特原则抽象工厂模式,则在其基础上,在工厂类中定义多个方法,分别用来创建不同的对象,提供给程序。
  2. 创建者模式:与工厂模式类似,只是相对来说多了一个专门用来适配调用适当的创建者(工厂中的方法),用来封装程序中易变的部分。
  3. 单例模式:主要用于创建一个类的单个实例,多用于多线程情况下,实现方式:1.私有化构造函数,防止外部直接创建,2.私有化对象变量 3.创建一个公共方法,用于创建对象实例,返回给外部。
  4. 原型模式:定义为用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 我的理解是:它通过实现cloneable接口,重写object中的方法达到对于对象的克隆操作,这样做相对于直接new一个对象来说性能更好,尤其是该对象占用的内存较大的情况下。
二.结构型模式
  1. 适配器模式:将接口不匹配的类的对象定义在适配器类中,用户通过访问适配器来达到访问该接口不匹配的类。
  2. 外观模式:由一个外观类提供若干方法,分别将想要集中处理的服务放在同一方法中,降低服务与服务之间的依赖。
  3. 桥接模式:将抽象与实现分离解耦,将需要拓展的功能通过子类进行一个扩充,使不同的抽象接口与实现进行一个组合,对一个实现的部分修改,对客户不产生影响。
  4. 装饰模式:通过在装饰类继承接口的实现,并在内部创建接口对象,重写实现类方法,从而给对象添加新的行为,拓展功能。
  5. 代理模式:指通过代理的方式来对目标对象进行访问,同时,可以在代理类中,对目标对象的功能进行扩充,这是基于开闭原则,即不修改已经写好的模块,只对其进行扩充,分为静态代理和动态代理,静态代理的实现是通过被代理对象与代理对象一同实现其接口或者继承父类,类似于装饰模式,代理对象内部实现 重写父类接口 方法的时候,引入被代理对象并自定义添加其他操作,缺点是一旦需要实现的接口增加新的方法,代理与被代理对象都要进行相应维护。动态代理的实现,依靠jdk的api引用大神的相关描述简单理解为,可以通过java.lang.reflect.Proxy这个类的newProxyInstance方法,来实现对代理对象的动态引用。
  6. 组合模式:将对单个对象及组合对象的使用一致。
  7. 享元模式:(有点懵)简单理解为 为了减少大量对象的使用造成的巨大开销,通过实现Flyweight接口,将对象变为共享对象,减少开销,详细参考
三.行为型模式

你可能感兴趣的:(java)