设计模式(23种)
分类
创建型模式(5):工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式(7):桥接模式、装饰者模式、代理模式、适配器模式、组合模式、外观模式、享元模式。
行为型模式(11):策略模式、观察者模式、模板方法、命令模式、状态模式、职责链模式、解释器模式、中介者模式、访问者模式、备忘录模式、迭代器模式。
六大原则
1、单一职责原则
一个类只负责一个功能领域中的相应职责。
2、开闭原则
一个实体对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
3、里氏代换原则
任何基类可以出现的地方,子类一定可以出现。
4、依赖倒置原则
抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
5、接口隔离原则
使用多个专门的接口,而不使用单一的总接口。
6、迪米特法则(最少知道原则)
一个实体应当可能少地与其他实体发生相互作用,使得系统功能模块相对独立。
常用的设计模式(后续会完善补充)
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
应用:
1. java.lang.Runtime;
2. 日志文件
3. 配置文件
4. 打印机
5. 回收站
6. 任务管理器
7. 数据库连接池
8. 线程池
(简单工厂模式:又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例)
工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
应用:
1. Collection中的iterator方法;
2. java.lang.Proxy#newProxyInstance()
3. java.lang.Object#toString()
4. java.lang.Class#newInstance()
5. java.lang.reflect.Array#newInstance()
6. java.lang.reflect.Constructor#newInstance()
7. java.lang.Boolean#valueOf(String)
8. java.lang.Class#forName()
桥接模式:将抽象部分与实现部分分离,使它们都可以独立的变化。
应用:
1. Collections类中的sort()方法;
2. JDBC数据库访问接口API;
装饰者模式:对已有的业务逻辑进一步的封装,使其增加额外的功能。即向一个现有的对象添加新的功能,同时又不改变其结构。
应用:
1. Java I/O使用装饰模式设计
代理模式:一个类代理另一个类的功能。
应用:
1. java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。
2. 远程代理
适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
应用:
1. java.io.InputStreamReader(InputStream)
2. java.io.OutputStreamWriter(OutputStream)
策略模式:将多个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
应用:
1. java.util.Comparator#compare()
2. javax.servlet.http.HttpServlet
3. javax.servlet.Filter#doFilter()
4. TreeSet的排序功能
5. TreeMap的排序功能
观察者模式(发布-订阅模式):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,让它们能够自动更新自己。
应用:
1. Observable类和Observer接口
模板方法模式:定义一个算法的骨架,而将具体的算法延迟到子类中来实现
应用:
1. AbstractClass抽象类里面的TemplateMethod()