创建模式:创建与使用分离,进行了解耦
多使用抽象接口,扩展不要修改原始功能
基类能使用的方法子类也应该能使用,因此子类尽量扩展父类方法而不是重写
构造方法中强制对组合等方式所需要的成员变量进行初始化赋值。
类中可以有抽象或者接口的成员,等到new时再实现。从而提高扩展性。
抽象接口的强大之处便是动态性
私有构造方法外界无法访问,也无法创建对象,所以必须是static的。只能用类名.方法来调用
饿汉式的问题在于没有使用该类的对象却创建了造成内存浪费
懒汉式
JVM在实例化对象时可能会进行指令重排序,使用volatile可以保证有序性。
自己创建对象传递给工厂,用户只需要知道工厂的类别即可,后续的加工处理操作由工厂来完成。工厂的factory为了可变是接口。
这样一来增加类别只需要添加类即可,不用修改原始代码。符合开闭原则(对扩展开放,对修改关闭)
简单来说就是一个抽象工厂实现多个类族,比如实现生产咖啡类和蛋糕类。
静态代码块会在类加载时执行一次
实现clone方法即可,这里注意深浅拷贝的影响。适用场景:生成的对象都差不多,批量复制。
比如三好学生,只有名字不同,生成多个原型对象后只需要修改名字即可。
动态代理
访问代理而不是目标类的对象,可以进行增强。
参数也可以是接口类型的
将继承改为聚合,构造函数里初始化。解决多继承的问题
装饰者模式
把一些实现类做组合。
比如有很多的类需要继承一个父类会产生爆炸与高耦合,采用装饰者模式可以代替继承(本质是把同一功能的类封装到一个类组合扩展功能)核心是继承于聚合,继承表明了所需要实现的功能,聚合减少了更多的子类来继承。
外观模式
相当于有一个中央控制器。特点是有统一的接口(比如都叫on)
组合模式
由叶子节点和枝节点用List形成。组合模式适合文件管理或者树状。
设置单例模式共享
Integer就是享元模式,初始化了256个初始对象(缓存池)。
实现了IOC,转而是父类的模板方法控制子类的执行流程。
策略模式
sort根据自定义的compartor来排序
责任链模式
根据任务的等级与自身的权限判断谁去处理
状态模式
根据当前状态判断是否可执行某些方法
迭代器模式
自定义实现hasnexat和next的遍历方法
备忘录模式
实现了ctrl z撤销的模式
解释器模式
计算器,设计一套可解释的逻辑解释器方法
设计模式的核心思想就是高内聚,低耦合。尽量使用多态留足接口。使用拓展功能而不是修改功能。并且对用户的权限做出限制。
spring通过反射来创建对象
将xml写的标签进行字符串拼接,寻找对应的set方法,提供了类则会进行类强转