高级应用:内部类的设计模式与内部类与外部类之间的交互

简介: 高级应用:内部类的设计模式与内部类与外部类之间的交互

1.内部类与外部类之间的交互

内部类与外部类之间可以相互访问对方的私有成员,这为程序设计提供了更大的灵活性和可扩展性

public class Outer {
    private int outerVar;
    public Outer(int outerVar) {
        this.outerVar = outerVar;
    }
    public void outerMethod() {
        System.out.println("Outer method");
    }
    public class Inner {
        private int innerVar;
        public Inner(int innerVar) {
            this.innerVar = innerVar;
        }
        public void innerMethod() {
            System.out.println("Inner method");
            System.out.println("Outer variable: " + outerVar); // 访问外部类的私有成员
            outerMethod(); // 调用外部类的方法
        }
    }
}
public class Main {
    public static void main(String[] args) {
        Outer outer = new Outer(10);
        Outer.Inner inner = outer.new Inner(5);
        inner.innerMethod();
    }
}

2.内部类的设计模式

内部类在设计模式中经常用于实现以下几种模式:

  • 迭代器模式:内部类可以实现一个迭代器,遍历外部类的集合元素。
  • 工厂模式:内部类可以实现一个工厂,用于创建外部类的实例。
  • 观察者模式:内部类可以作为观察者,监听外部类的状态变化。
  • 单例模式:通过私有构造方法和内部类实现线程安全的单例模式。
// 迭代器模式
public class MyCollection {
    private List<String> list;
    public MyCollection() {
        list = new ArrayList<>();
    }
    public void add(String element) {
        list.add(element);
    }
    public Iterator<String> getIterator() {
        return new MyIterator();
    }
    private class MyIterator implements Iterator<String> {
        private int index;
        @Override
        public boolean hasNext() {
            return index < list.size();
        }
        @Override
        public String next() {
            return list.get(index++);
        }
    }
}
// 工厂模式
public class AnimalFactory {
    public Animal createAnimal(String type) {
        if ("dog".equalsIgnoreCase(type)) {
            return new Dog();
        } else if ("cat".equalsIgnoreCase(type)) {
            return new Cat();
        } else {
            throw new IllegalArgumentException("Invalid animal type: " + type);
        }
    }
    private class Dog implements Animal {
        @Override
        public void makeSound() {
            System.out.println("Dog barks");
        }
    }
    private class Cat implements Animal {
        @Override
        public void makeSound() {
            System.out.println("Cat meows");
        }
    }
}
// 观察者模式
public interface Observer {
    void update(String message);
}
public class Subject {
    private List<Observer> observers;
    public Subject() {
        observers = new ArrayList<>();
    }
    public void addObserver(Observer observer) {
        observers.add(observer);
    }
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }
    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}
// 单例模式
public class Singleton {
    private Singleton() {
    }
    public static Singleton getInstance() {
        return Holder.INSTANCE;
    }
    private static class Holder {
        private static final Singleton INSTANCE = new Singleton();
    }
}

总结

内部类的高级应用为Java程序设计提供了更多的设计模式和交互方式,使代码更加灵活、模块化,并且更好地实现了面向对象编程的原则。通过熟练运用内部类,可以使代码更加优雅和易于维护,提高开发效率和代码质量。

相关文章
|
8天前
|
设计模式 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 设计模式与实战应用
【4月更文挑战第30天】本文探讨JavaScript设计模式在提升开发效率和代码质量中的关键作用。涵盖单例、工厂、观察者、装饰器和策略模式,并通过实例阐述其在全局状态管理、复杂对象创建、实时数据更新、功能扩展和算法切换的应用。理解并运用这些模式能帮助开发者应对复杂项目,提升前端开发能力。
|
8天前
|
设计模式 安全 Java
构建未来应用:Java设计模式 - 建造者模式(Builder)在现代编程中的应用
【4月更文挑战第7天】建造者模式是提升代码质量的关键,尤其在复杂环境中。它分步骤构建对象,将构建与表示分离,适用于UI构建、数据模型组装、配置文件解析和网络请求构造等场景。最佳实践包括明确构建步骤、提供默认值、支持链式调用和确保线程安全。然而,过多步骤、不一致状态和性能问题是使用时需注意的问题。掌握建造者模式对于现代编程至关重要。
|
8天前
|
设计模式 缓存 安全
代码的艺术:如何用设计模式打造优雅的Java应用
【4月更文挑战第7天】本文介绍了提升Java代码质量的七个设计模式:单例(Singleton)、工厂方法、抽象工厂、建造者、原型、适配器和观察者模式。这些模式分别用于资源管理、对象创建、接口兼容和消息传递等场景,旨在增强代码的灵活性、可读性和可维护性。掌握并适时应用设计模式,能帮助开发者打造高效、优雅的软件作品。
|
8天前
|
设计模式 存储 缓存
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用(二)
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用
35 0
|
7天前
|
设计模式 XML Java
第五篇 设计模式的选择和应用 - 智慧选择与合理实践
第五篇 设计模式的选择和应用 - 智慧选择与合理实践
|
3天前
|
设计模式 缓存
理解并应用设计模式在软件开发中的重要性
【5月更文挑战第20天】设计模式是软件开发中的最佳实践,用于解决常见设计问题,提高代码可读性、可维护性、可扩展性和灵活性。本文介绍了为何需要设计模式(如管理依赖、增强可重用性、设计易扩展系统)以及常见的设计模式:工厂模式(封装对象创建)、单例模式(确保类唯一实例)、观察者模式(事件驱动)和适配器模式(解决接口不兼容)。应用设计模式的关键步骤包括识别问题、选择模式、实现模式及测试优化。设计模式对于提升代码质量和降低系统风险至关重要。
|
7天前
|
设计模式 存储 SQL
第四篇 行为型设计模式 - 灵活定义对象间交互
第四篇 行为型设计模式 - 灵活定义对象间交互
|
8天前
|
设计模式 JavaScript 算法
js设计模式-策略模式与代理模式的应用
策略模式和代理模式是JavaScript常用设计模式。策略模式通过封装一系列算法,使它们可互换,让算法独立于客户端,提供灵活的选择。例如,定义不同计算策略并用Context类执行。代理模式则为对象提供代理以控制访问,常用于延迟加载或权限控制。如创建RealSubject和Proxy类,Proxy在调用RealSubject方法前可执行额外操作。这两种模式在复杂业务逻辑中发挥重要作用,根据需求选择合适模式解决问题。
|
8天前
|
设计模式 算法 Java
设计模式在Java开发中的应用
设计模式在Java开发中的应用
20 0
|
8天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
27 4