设计模式的七大原则
1.1单一职责原则
对于一个类就是一个类应该是的负责一项职责。例如在A负责两个不同的职责的时候,在改变其中一个职责的时候需要修改A类,所以单一职责原则就是将将A分解为A1 A2。
1.2接口隔离原则
1.3依赖倒转原则(接口性)
1.4里式替换原则(继承性)
1.5开闭原则
1.6迪米特原则
1.7合成复用原则
简单工厂模式(静态工厂类):是一个具体的负责的创建的一个类。
工厂模式示意图:
优点:客户端不需要负责对象的创建 进而明确和每一个类的职责
缺点:这个静态的工厂的负责的所有的对象的创建,如果新的对象增加,或者是对象的创建的方式不同,就需要不断的修改工厂类。不利于后期的维护。
/**
* Copyright (C), 2018-2020
* FileName: AnimalFactory
* Author: xjl
* Date: 2020/2/25 18:31
* Description: 工厂类
*/
package JAVA_pattern;
public class AnimalFactory {
private AnimalFactory() {
}
public static Animal createAnimal(String type){
if("dog".equals(type)){
return new Dog();
}else if ("cat".equals(type)) {
return new Cat();
}else {
return null;
}
}
// public static Dog creatDog() {
// return new Dog();
// }
//
// public static Cat creatCat() {
// return new Cat();
// }
}
单例设计模式(饿汉模式)
单例设计模式要确保类在内存中只有一个对象,该对象例必须自动的创建,并对外提供。
优点:在系统中内存中已存在一个对象,因此可以节约系统资源,对于一些需要频繁的创建和销毁的对象的单例模式
缺点是:没有抽象层,因此在在扩展上很难。
/**
* Copyright (C), 2018-2020
* FileName: Student
* Author: xjl
* Date: 2020/2/25 21:46
* Description: 学生类
*/
package JAVA_pattern;
/**
* 保证泪在单例模式中只有一个对象
*/
public class Student {
//构造私有方法
private Student(){}
//自己构建一个对象
//不能让外界直接进行访问
private static Student s=new Student();
//提供公共访问的方法
public static Student getStudent(){
return s;
}
}
/**
* Copyright (C), 2018-2020
* FileName: Teacher
* Author: xjl
* Date: 2020/2/25 22:32
* Description: 懒汉模式测试
*/
package JAVA_pattern;
public class Teacher {
private Teacher() {
}
private static Teacher t = null;
//在用的时候在才去创建对象 在加载synchronize后进行和锁
Public synchronize static Teacher getTeacher() {
if(t==null){
t=new Teacher();
}
return t;
}
}
单例模式(手撕各种单例模式)
工厂模式(Spring的BeanFactory,ApplicationContext)vs.抽象工厂模式
构造器模式(应用场景:解决构造复杂对象的麻烦。复杂:需要输入的参数的组合较多)
***模式(Spring AOP(动态***模式:2种实现方式,即jdk & 字节码方式))
装饰器模式(应用场景:若想对一个类从不同角度进行功能扩展,例如java.io中,InputStream是一个抽象类,标准类库中提供了FileInputStream\ByteArrayInputStream等各种不同的子类,分别从不同角度对InputStream进行了功能扩展。这些不同的实现类其构造函数的输入均为InputStream(的实现类),然后对InputStream添加不同层次的逻辑,从而实现不同的功能,这就是装饰。)
观察者模式(各种事件***)
策略模式(比较器Comparator)
迭代器模式(ArrayList等集合框架中的迭代器)
生产者消费者模式(消息队列)要能手撕
...还有很多,但是掌握这些基本上够了
代理模式:(包括两种的代理:静态代理、动态代理技术)给目标对象的提供的一个代理的,并有代理的对象控制目标对象的应用。
目的是为了:1通过引入代理对象的方式来简介的控制目标对象,防止直接访问目标对象给系统带来的不必要的复杂性。2通过代理对象对原理的业务进行增强的一种方式。
动态代理的中应用反射技术实现的方法的实现。
开闭原则:程序对外扩展的开放,对修改是关闭的,换一句话当需求发生变化时候我们可以通过添加新的模块来满足需求,而不是采用的是修改原的代码来满足需求。如果是违反了开闭原则那就就会产生的扩展性差,维护性差。