java设计模式总结
设计模式6大原则
(1)开闭原则:对拓展开放,对修改关闭
(2)里氏替换原则:基类能被子类替换
(3)依赖倒转原则:依赖于抽象,不依赖于具体
(4)接口隔离原则:尽量分开设计接口
(5)最少知道原则:功能模块实体尽量相互独立
(6)合成复用原则:组合优于继承
一、创建型模式:
1.工场方法模式Factory
实现对同一个接口的一些类的实例的创建
2.抽象工场模式Abstract Factory
工场类也用接口进行抽象,不同的需求,实现不同的工场类
3.单例模式Singleton
构造函数设成私有,防止外部直接new初始化。利用JVM类初始化只进行一次且是的线程安全。只提供一个public方法获取实例。
SingletonFactory.instance优于直接return instance;
4.建造者模式Builder
多个工场组成的数组
5.原型模式Prototype
对象作为原型复制。浅拷贝和深拷贝区别:深拷贝会把引用的对象也拷贝,浅拷贝只是简单的改变引用,内存还是指向同一个对象。
二、结构性模式
1.适配器模式
将某个类Source的接口method转换为另一个接口Target,进行接口适配。
类的适配器:直接继承Source,实现Target
对象适配器:持有Source实例,实现Target
接口适配器:用抽象类实现接口进行适配,目标类继承抽象类,实现具体方法。
2.装饰模式Decorator
给对象(被装饰的对象Source)动态添加新的功能,都实现同一接口Sourceable,装饰类Target持有Sourceable对象
3.代理模式Proxy
代理类控制原对象的访问,也是实现同一接口Sourceable,但Target持有的是Source对象,编译时确定代理关系。
4.外观模式Facade
解决类与类之间的依赖关系,如Spring.
Computer -> {CPU,Memory,Disk}
5.桥接模式Bridge
使事物和实现分开,使各自独立变化,如JDBC桥DriverManager->Driver{MySqlDriver,OracleDriver,DB2Driver}
6.组合模式Composite
整体-部分,类似树形结构
7.享元模式FlyWeight
实现对象的共享,减少内存的开销,如JDBC连接池的属性url,username对于每个连接来说都是一样的。
三、行为型模式
1.策略模式Strategy
定义一系列算法,且把算法封装起来。设计一个接口,为一系列实现类提供统一的方法。
2.模板方法模式Template Method
抽象类,有n个方法,可以抽象或实际方法。定义子类继承抽象类,重写方法,调用抽象类,实现对子类的调用。
3.观察者模式Observer
当一个对象变化时,依赖该对象的对象都会收到通知,随之变化。
4.迭代器模式Iterator
顺序访问集合的对象。自定义迭代器持有集合的对象。
5.责任链模式Chain of Responsibility
对象持有下一个对象的引用,形成一条链,请求一直传递直到处理请求。封装隐藏
6.命令模式Command
调用者Invoker->命令Command->接收者Receiver
Command持有Receiver对象的引用
7.备忘录模式Memento
保存一个对象的状态,以便在适当的时候恢复对象。
8.状态模式State
当对象的状态改变,同事改变其行为。
9.访问者模式Visitor
分离对象数据结构的行为和方法,达到为被访问者动态添加新的操作而无需做其他的修改。
适用场景:为一个现有的类增加新的功能。
10.中介者模式Mediator
类与类之间的解耦,类似spring。通过接口封装,持有原来对象的引用。
11.解释器模式Interpreter
OOP开发中的编译器的开发