设计模式
设计模式的七大原则
开闭原则:对拓展开放,对修改关闭。如需求变化,尽可能托钻,而不是修改原来的代码。
单一职责:一个类只做一件事情,避免职责太多,难以维护。
接口隔离:接口进行拆分细化,需要哪个实现哪个,避免不必要的实现。和单一职责类似。
依赖倒置:多态,依赖于接口,而不依赖于具体的实现。
里氏替换:继承中父类应该保持原有的性质在子类中任然成立。
迪米特法则:一个软件实体对其他实体的引用越少越好,只跟朋友交谈不跟陌生人交谈,a和b交谈,a和c不交谈。
合成复用原则:多用组合,少用继承,如果要使用继承要综训里氏替换原则,超类的东西必须在子类中依然成立。
总结:目的解决耦合性问题,面向接口编程而不是面向具体的实现。
https://www.cnblogs.com/WindSun/p/10223080.html
单例
保证一个类仅有一个实例。
1.私有化的构造函数
2.私有的静态的全局变量
3.公有的静态的方法
饿汉式:
public class Singleton1 {
private Singleton1() {};
private static Singleton1 single = new Singleton1();
public static Singleton1 getInstance() {
return single;
}
}
懒汉式:
public class Singleton2 {
private Singleton2() {}
private static Singleton2 single=null;
public static Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
工厂:
简单工厂:传什么造什么。
工厂模式:每个工厂只生产一种产品,客户端通过不同的工厂去生产不同的产品,具体生产什么产品工厂觉得,客户只需要制定工厂。
抽象工厂:抽象工厂是对工厂的抽象。
https://blog.csdn.net/weixin_35985385/article/details/81430545
https://www.cnblogs.com/peter_zhang/p/AbstractFactory.html
代理
静态代理:对代理类进行包装,实现代码。
jdk动态代理:InvocationHandler的getProxy()通过反射获取代理对象,执行invoke实现代理并返回结果。改目标类就行,可以代理多个类。面向接口。
CGLIB: MethodInterceptor的intercept执行回调。
1)JDK动态代理只能对实现了接口的类生成代理,而不能针对类。
2)CGLIB是针对类实现代理,主要是对指定的类生成一个子类。如果目标对象没有实现接口,则默认会采用CGLIB代理;
适配器
将一个接口转化成客户希望的接口,使得不兼容的接口不能一起工作可以一起工作。
https://www.cnblogs.com/qinggege/p/5233859.html
观察者:
发布订阅模式,被观察者将要观察的对象添加到集合里面,然后执行通知,对象间存在一对多关系,当一个对象被修改时,自动通知其他的依赖对象
https://blog.csdn.net/cenjianteng/article/details/105827272
状态模式
状态改变影响其行为,将状态抽取出来给与不同的实现,执行时方法依赖状态的接口,,调用时穿那个状态执行那个操作。
魔板模式: