1.单例设计模式
* 单例设计模式:保证类在内存中只有一个对象。
饿汉式
class Singleton {
//1,私有构造函数
private Singleton(){}
//2,创建本类对象
private static Singleton s = new Singleton();
//3,对外提供公共的访问方法
public static Singleton getInstance() {
return s;
}
}
懒汉式
class Singleton {
//1,私有构造函数
private Singleton(){}
//2,声明一个本类的引用
private static Singleton s;
//3,对外提供公共的访问方法
public static Singleton getInstance() {
if(s == null)
//线程1,线程2
s = new Singleton();
return s;
}
}
区别:
1.饿汉式是空间换时间,懒汉式是时间换空间
2.在多线程访问时,饿汉式不会创建多个对象,而懒汉式有可能会创建多个对象
第三种格式
class Singleton {
private Singleton() {}
public static final Singleton s = new Singleton();//final是最终的意思,被final修饰的变量不可以被更改
}
2.策略模式 封装变化;多用组合、少用继承;针对接口编程、不针对实现编程
定义了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
将对象的行为设计一个接口,这个行为的子行为分别实现这个接口。
例如:有不同的会员,设计一个会员的接口,让不同的会员(超级会员,普通会员,vip)分别实现这个接口。
3.观察者模式 为交互对象之间的松耦合设计而努力
定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
观察者模式提供了一种对象设计,让主题和观察者之间松耦合,让对象之间的互相依赖降到最低。
java内置有观察者模式类 java.util.Observable 可观察者类 java.util.Observer 观察者类
但Observable是一个类,并不是接口,这样会违反我们多用组合,少用继承的规则
4.装饰者模式 为扩展开放,对修改关闭(开闭原则)
动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
缺点:利用装饰者模式,常常造成设计中有大量的小类,数量实在太多,可能会造成使用此API程序员的困扰
5.工厂模式