Rumah  >  Artikel  >  Java  >  Aplikasi antara muka dan kelas abstrak dalam corak reka bentuk di Jawa

Aplikasi antara muka dan kelas abstrak dalam corak reka bentuk di Jawa

PHPz
PHPzasal
2024-05-01 18:33:01544semak imbas

Antara muka dan kelas abstrak digunakan dalam corak reka bentuk untuk penyahgandingan dan kebolehlanjutan. Antara muka mentakrifkan tandatangan kaedah, kelas abstrak menyediakan pelaksanaan separa, dan subkelas mesti melaksanakan kaedah yang tidak dilaksanakan. Dalam corak strategi, antara muka digunakan untuk menentukan algoritma, dan kelas abstrak atau kelas konkrit menyediakan pelaksanaan, membenarkan penukaran dinamik algoritma. Dalam corak pemerhati, antara muka digunakan untuk menentukan tingkah laku pemerhati, dan kelas abstrak atau konkrit digunakan untuk melanggan dan menerbitkan pemberitahuan. Dalam corak penyesuai, antara muka digunakan untuk menyesuaikan kelas yang sedia ada atau kelas konkrit boleh melaksanakan antara muka yang serasi, membenarkan interaksi dengan kod asal.

Java 中接口和抽象类在设计模式中的应用

Aplikasi antara muka dan kelas abstrak dalam corak reka bentuk dalam Java

Dalam reka bentuk perisian, antara muka dan kelas abstrak adalah komponen utama untuk mencapai penyahgandingan dan kebolehskalaan. Mereka membenarkan modul yang berbeza dibangunkan dan digunakan secara bebas sambil mengekalkan keserasian.

Antaramuka

  • Antara muka mentakrifkan set tandatangan kaedah tetapi tidak menyediakan pelaksanaan untuknya.
  • Kelas yang melaksanakan antara muka mesti melaksanakan semua kaedah yang diisytiharkan.
  • Sesuatu antara muka boleh mempunyai berbilang pelaksanaan, membenarkan gelagat berbeza ditukar pada masa jalan.

Kelas abstrak

  • Kelas abstrak menyediakan pelaksanaan separa, dan beberapa kaedahnya tidak dilaksanakan.
  • Subkelas yang melanjutkan kelas abstrak mesti melaksanakan semua kaedah yang tidak dilaksanakan, atau mengisytiharkan diri mereka abstrak.
  • Kelas abstrak hanya boleh mempunyai satu pelaksanaan, tetapi boleh diakses melalui polimorfisme dalam subkelasnya. Aplikasi dalam Corak Reka Bentuk algoritma, dan menggunakan kelas abstrak atau pelaksanaan konkrit untuk menyediakan pelaksanaan. Ini membolehkan algoritma ditukar secara dinamik mengikut keperluan semasa masa jalan.

Corak Pemerhati: Gunakan antara muka untuk menentukan tingkah laku pemerhati dan pelanggan. Kelas abstrak atau pelaksanaan konkrit boleh digunakan sebagai objek langganan, manakala pemerhati boleh mendaftar dan menyahdaftar untuk menerima kemas kini.

Corak Penyesuai:

Gunakan antara muka untuk menyesuaikan kelas sedia ada kepada antara muka yang berbeza. Kelas abstrak atau pelaksanaan konkrit boleh melaksanakan antara muka yang serasi, membolehkan mereka berinteraksi dengan kod warisan.

Kes praktikal

Corak strategi:

interface SortingAlgorithm {
    int[] sort(int[] arr);
}

abstract class AbstractSortingAlgorithm implements SortingAlgorithm {
    public void swap(int[] arr, int i, int j) {
        // 交换 arr 中索引为 i 和 j 的元素
    }
}

class BubbleSort extends AbstractSortingAlgorithm {
    @Override
    public int[] sort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    swap(arr, j, j + 1);
                }
            }
        }
        return arr;
    }
}

class QuickSort extends AbstractSortingAlgorithm {
    @Override
    public int[] sort(int[] arr) {
        // 快排算法实现
    }
}

// 使用
SortingAlgorithm algorithm = new BubbleSort();
int[] sortedArr = algorithm.sort(arr);
Dalam contoh ini, antara muka SortingAlgorithm mentakrifkan kelakuan pengisihan, manakala BubbleSort dan /code> menyediakan pelaksanaan khusus. Memandangkan kedua-duanya melaksanakan antara muka yang sama, mereka boleh ditukar dengan mudah pada masa jalan seperti yang diperlukan.

Corak Pemerhati:

interface Observer {
    void update(Observable observable);
}

abstract class Observable {
    private List<Observer> observers = new ArrayList<>();

    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    protected void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(this);
        }
    }
}

class ConcreteObservable extends Observable {
    private int state;

    public void setState(int state) {
        this.state = state;
        notifyObservers();
    }
}

class ObserverA implements Observer {
    @Override
    public void update(Observable observable) {
        // 收到通知并根据变化的 state 做出反应
    }
}

// 使用
ConcreteObservable observable = new ConcreteObservable();
ObserverA observerA  = new ObserverA();
observable.addObserver(observerA);
observable.setState(10); // 通知观察者 state 发生变化

Dalam contoh ini, antara muka Observer mentakrifkan kelakuan pemerhati, manakala kelas abstrak Observable menyediakan mekanisme pemberitahuan langganan dan penerbitan. ConcreteObservable dan ObserverA ialah pelaksanaan konkrit, di mana ConcreteObservable mengurus senarai pemerhati dan memberitahu mereka tentang perubahan keadaan, manakala ObserverA boleh Mengambil tindakan berdasarkan perubahan ini.

Atas ialah kandungan terperinci Aplikasi antara muka dan kelas abstrak dalam corak reka bentuk di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Peranan try dalam javaArtikel seterusnya:Peranan try dalam java