说明:
本人目前没有涉及到很深入的设计模式的应用,所以在这里简单陈述一下自己接触过的模式。忘小伙伴们海涵。如果有很好的借鉴,可以多多可我留言,我进行补充,大家一起进步,谢谢。
设计模式是代码可用性的延伸。
设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方法。
①创建型模式;
②结构型模式;
③行为型模式;
※标识:为常用设计模式,8种。
创建型模式 | 结构型模式 | 行为型模式 | J2EE模式 |
※工厂模式 | ※适配器模式 | 责任链模式 | MVC 模式 |
※抽象工厂模式 | 桥接模式 | 命令模式 | 业务代表模式 |
※单例模式 | 过滤器模式 | 解释器模式 | 组合实体模式 |
※建造者模式 | 组合模式 | 迭代器模式 | 数据访问对象模式 |
原型模式 | ※装饰器模式 | 中介者模式 | 前端控制器模式 |
外观模式 | 备忘录模式 | 拦截过滤器模式 | |
享元模式 | 观察者模式 | 服务定位器模式 | |
※代理模式 | 状态模式 | 传输对象模式 | |
空对象模式 | |||
※策略模式 | |||
模板模式 | |||
访问者模式 |
设计模式六大原则:
①开闭原则:对扩展开放,对修改关闭;
②里氏代换原则:是面向对象的基本原则之一。是对开闭原则的补充。实现开闭原则的关键是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
③依赖倒转原则:针对接口编程,依赖于抽象而不依赖于具体;是开闭原则的基础。
④接口隔离原则:使用多个隔离的接口比使用单个的接口要好。降低类之间的耦合度。
⑤迪米特法则:一个实体应该尽量少的于其他实体之间发生相互作用,使得系统功能模块相对独立。
⑥合成复用原则:尽量使用合成/聚合的方式,而不是使用继承。
常用设计模式:
单例模式:
特点:
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;
}
}
//懒汉式单例[延迟加载方式,多线程安全,但效率低]
public class Singleton3 {
private Singleton3() {}
private static Singleton3 single = null;
public static Singleton3 getInstance() {
//等同于 synchronized public static Singleton3 getInstance()
synchronized (Singleton3.class) {
//注意:里面的判断是一定要加的,否则出现线程安全问题
if (single == null) {
single = new Singleton3();
}
return single;
}
}
}
//懒汉式单例[延迟加载方式,多线程安全,效率高]
public class Singleton4 {
private Singleton4() {}
private static Singleton4 single = null;
// 双重检查
public static Singleton4 getInstance() {
if (single == null) {
synchronized (Singleton4.class) {
if (single == null) {
single = new Singleton4();
}
}
}
return single;
}
}
//静态内部类
public class Singleton5 {
private Singleton5() {}
//静态内部类
private static class innerObject {
private static Singleton5 single = new Singleton5();
}
public static Singleton5 getInstance() {
return innerObject.single;
}
}
//static静态代码块实现
public class Singleton6 {
private Singleton6() {}
private static Singleton6 single = null;
static{
single = new Singleton6();
}
//静态代码块
public static Singleton6 getInstance() {
return single;
}
}
单例优势:
1) 减少创建Java实例所带来的系统开销
2) 便于系统跟踪单个Java实例的生命周期、实例状态等。
工厂模式:
策略模式:
引用:
http://www.cnblogs.com/garryfu/p/7976546.html
https://www.cnblogs.com/yuanye0918/p/5961087.html