[笔记] Java基础(10)-设计模式

86 阅读2分钟

1. 装饰者模式

  • 装饰者模式:在包装类的构造方法传入被包装对象,并在类中类似重写被包装类的方法,对原有方法进行升级(不需要升级的方法调用原有方法)
  • 实现步骤:定义被装饰类引用>>构造方法中传入被装饰对象>>对原有功能升级
  • 好处:相对于继承关系,耦合性不强

2. 单例模式

  • 单例模式:保证类在内存中只有一个对象
  • 实现步骤:私有构造方法,在类中定义私有的本类对象,提供静态的公共访问方法
  • 实现方式
    • 饿汉式:声明时创建对象
    • 懒汉式:采用延迟加载思想,在访问时创建对象
    • 区别:饿汉式以空间换时间,懒汉式以时间换空间;懒汉式在多线程访问时存在线程安全问题,可能会创建多个对象
  • 简化实现方式:私有构造方法,定义公有的本类对象并使用final修饰

3. 简单工厂模式

  • 简单工厂模式:又称为静态工厂方法模式;由一个具体的工厂类负责创建类的对象,类中提供静态方法返回具体对象
  • 优点:客户端不需要再负责对象的创建,从而明确了各个类的职责
  • 缺点:工厂类负责所有对象的创建,如果有新的对象增加或创建方式改变,需要对工厂类进行修改,不利于后期维护

4. 工厂方法模式

  • 定义一个抽象的工厂类,里面包含创建对象的接口,具体创建对象的工作由继承抽象工厂类的具体类实现
  • 优点:客户端不需要负责对象创建,从而明确各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
  • 缺点:需要额外编写代码,增加了工作量

5. 适配器模式

  • 常见于监听器中,一个类实现了监听接口,但实现方法为空,并且该实现类为抽象类,不能被实例化;目的是为了简化操作,避免重写无用的方法

6. 模板模式

  • 模板模式:定义一个算法的骨架,具体算法由子类实现

  • 优点:具体的算法实现灵活

  • 缺点:算法骨架修改需要修改抽象类

  • 模板模式实现获取方法执行时间

    abstract class GetTime {
        /* 计算执行时间 */
        public void getTime() {
            long start = System.currentTimeMillis();
            fun();
            long end = System.currentTimeMillis();
            System.out.println(end - start);
        }
        /* 需要获取执行时间的方法 */
        public abstract void fun();
    }