Corak reka bentuk tidak sesuai untuk digunakan dalam fungsi Java: Keadaan berubah: Gunakan kelas tidak berubah untuk mengelakkan kesan sampingan. Corak Pemerhati: Menggunakan seni bina dipacu peristiwa untuk mencapai gandingan longgar dan kebolehskalaan. Corak strategi: Gunakan gabungan fungsi untuk memudahkan pelaksanaan corak strategi. Corak kaedah kilang: Gunakan pengiraan malas dan tangguhkan penciptaan objek.
Fungsi Java: Beberapa corak reka bentuk tidak boleh digunakan
Pengenalan
Pengaturcaraan fungsional ialah paradigma berkuasa yang menekankan penggunaan data tidak berubah dan fungsi tulen. Walau bagaimanapun, tidak semua corak reka bentuk sesuai untuk digunakan dengan fungsi Java. Artikel ini meneroka beberapa corak reka bentuk yang tidak sesuai untuk digunakan dengan fungsi Java dan menyediakan alternatif.
Corak reka bentuk yang tidak sesuai digunakan
1. Keadaan berubah
Keadaan pembolehubah ialah konsep yang bertentangan dengan prinsip pengaturcaraan berfungsi. Pengaturcaraan fungsional menekankan penggunaan data tidak berubah untuk mengelakkan kesan sampingan yang tidak dijangka. Corak berikut bergantung pada keadaan boleh ubah:
Alternatif: Gunakan kelas tidak berubah
Ganti kelas boleh ubah dengan kelas tidak berubah. Sebagai contoh, anda boleh menggunakan ImmutableMap
dan bukannya HashMap
. ImmutableMap
而不是 HashMap
。
2. 观察者模式
观察者模式涉及观察者和目标类,其中目标类通知观察者有关其状态更改。这种模式不适合 Java 函数,因为函数不能修改外部状态。
替代方案:使用事件驱动的体系结构
使用事件驱动的体系结构,其中发布者发布事件,而订阅者订阅这些事件。这允许松散耦合和可扩展性。
3. 策略模式
策略模式允许在运行时改变算法行为。虽然可以通过使用函数引用来实现策略模式,但可以使用更简单的函数组合技术。
替代方案:使用函数组合
将策略模式重构为使用函数组合。例如,使用 andThen()
和 compose()
方法来组合多个函数。
4. 工厂方法模式
工厂方法模式负责创建对象,但不能很好地处理延迟求值。在函数式编程中,延迟求值是至关重要的。
替代方案:使用惰性计算
使用惰性计算技术来延迟对象的创建。例如,使用 Supplier
2. Corak Pemerhati
Corak pemerhati melibatkan pemerhati dan kelas sasaran, di mana kelas sasaran memberitahu pemerhati tentang perubahan keadaannya. Corak ini tidak sesuai untuk fungsi Java kerana fungsi tidak boleh mengubah suai keadaan luaran.Alternatif: Gunakan seni bina dipacu acara
Gunakan seni bina dipacu acara tempat penerbit menerbitkan acara dan pelanggan melanggan acara ini. Ini membolehkan gandingan longgar dan kebolehskalaan. 🎜3. Mod Strategi 🎜🎜🎜Mod strategi membolehkan menukar tingkah laku algoritma semasa masa jalan. Walaupun corak Strategi boleh dilaksanakan dengan menggunakan rujukan fungsi, teknik gubahan fungsi yang lebih mudah boleh digunakan. 🎜🎜🎜Alternatif: Menggunakan Komposisi Fungsi🎜🎜🎜Faktor semula corak Strategi untuk menggunakan komposisi fungsi. Sebagai contoh, gunakan kaedahandThen()
dan compose()
untuk menggabungkan berbilang fungsi. 🎜🎜🎜4. Corak Kaedah Kilang 🎜🎜🎜Corak kaedah kilang bertanggungjawab untuk mencipta objek, tetapi tidak mengendalikan penilaian malas dengan baik. Dalam pengaturcaraan berfungsi, penilaian malas adalah penting. 🎜🎜🎜Alternatif: Gunakan Lazy Evaluation 🎜🎜🎜Gunakan teknik penilaian malas untuk melambatkan penciptaan objek. Contohnya, gunakan antara muka Pembekal
. 🎜🎜🎜Contoh Praktikal🎜🎜🎜Contoh kod berikut menunjukkan cara menggunakan alternatif untuk memfaktorkan semula fungsi Java yang bergantung pada corak Observer: 🎜// 原来使用观察者模式的 Java 函数 public class ObserverFunction { private List<Observer> observers = new ArrayList<>(); public void addObserver(Observer observer) { observers.add(observer); } public void notifyObservers() { for (Observer observer : observers) { observer.update(); } } // 业务逻辑 public void doSomething() { // ... notifyObservers(); // 修改外部状态 // ... } } // 使用事件驱动的体系结构的重构版本 public class EventFunction { private Publisher publisher = new Publisher(); // 订阅事件 public void subscribe(Consumer<Event> consumer) { publisher.subscribe(consumer); } // 发布事件 public void publishEvent(Event event) { publisher.publish(event); } // 业务逻辑 public void doSomething() { // ... publishEvent(new Event()); // 不修改外部状态 // ... } }🎜🎜Kesimpulan🎜🎜🎜Dengan memahami corak penggunaan reka bentuk dengan fungsi Java yang tidak sesuai , anda Anda boleh menulis kod yang lebih bersih dan boleh diguna semula. Artikel ini menyediakan alternatif dan contoh untuk membantu anda memfaktorkan semula kod sedia ada dan mereka bentuk kod baharu dengan cara yang berfungsi. 🎜
Atas ialah kandungan terperinci Adakah terdapat beberapa corak reka bentuk yang tidak sesuai untuk digunakan dengan fungsi Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!