设计模式
单例模式
开发中有很多类的对象我们只需要一个,例如虚拟机对象、任务管理器对象,对以上对象使用单例模式可以节约内存,提高性能
饿汉单例——通过类获取单例对象时,对象已经提前做好
懒汉单例—— 通过类获取单例对象的时候发现没有对象才会去创建一个对象
public class SingleInstanceDemo01 { public static void main(String[] args) { SingleInstance s1 = SingleInstance.getInstance(); SingleInstance s2 = SingleInstance.getInstance(); System.out.println(s1 == s2); // true } } // 饿汉单例设计一个单例模式的类 class SingleInstance01() { // 2. 定义一个静态成员变量用于存储一个对象(饿汉模式在返回对象时,对象要已经做好), public static SingleInstance01 ins = new SingleInstance01(); // 1. 把类的构造器私有,构造器只能在本类中访问!! private SingleInstance01() { } // 3. 提供一个方法返回单例对象 public static SingleInstance01 getInstance() { return ins; } } // 懒汉单例设计一个单例模式的类 class SingleInstance02() { // 2. 定义一个静态成员变量用于存储一个对象(懒汉模式不能直接创建对象,必须需要的时候才创建) public static SingleInstance02 ins; // 1. 构造器私有 private SingleInstance02() { } // 3. 通过方法返回一个对象,第一次不存在对象才创建一个返回 public static SingleInstance02 getInstance() { if ( ins == null) { // 第一次取对象,创建一个对象 ins = new SingleInstance02(); } return ins; } }
工厂模式
通常创建类对象时,都是使用new对象的形式创建,除new对象方式以外,工厂模式也可以创建对象
工厂设计模式的作用
对象通过工厂的方法创建对象返回,工厂的方法可以为该对象进行加工和数据注入
优点:可以实现类与类之间的解耦操作(核心思想,重点)
缺点:工厂设计模式多了一个工厂类
装饰模式
装饰模式指的是在不改变原类,不使用继承的基础上,动态地拓展一个类的功能
思想:创建一个新类,包装原始类,从而在新类中提升原来类的功能
装饰模式实现原则
1. 定义父类
2. 定义原始类,继承父类,定义功能
3. 定义装饰类,继承父类,包装原始类,增强功能
public abstract class InputStreamDemo { public abstract void read(); public abstract void close(); } public class FileInputStreamDemo extends InputStreamDemo{ @Override public void read() { System.out.println("读取数据"); } @Override public void close() { System.out.println("关闭流"); } } public class BufferedInputStreamDemo extends InputStreamDemo{ private InputStreamDemo is; public BufferedInputStreamDemo(InputStreamDemo is) { this.is = is; } @Override public void read() { System.out.println("开启搞冲缓冲读取"); is.read(); } @Override public void close() { is.close(); } } public class Demo { public static void main(String[] args) { InputStreamDemo is = new BufferedInputStreamDemo(new FileInputStreamDemo()); is.read(); is.close(); } }