Rumah  >  Artikel  >  Java  >  Corak Pemerhati

Corak Pemerhati

Patricia Arquette
Patricia Arquetteasal
2024-11-03 23:41:31333semak imbas

Apakah Corak Pemerhati?

Corak pemerhati ialah corak tingkah laku yang mentakrifkan kebergantungan satu-ke-banyak antara objek supaya apabila satu objek berubah keadaan, semua tanggungannya dimaklumkan dan dikemas kini secara automatik.

Objek menukar keadaan dipanggil Subjek, dan tanggungannya dipanggil Pemerhati.

Bila nak guna?

Anda boleh menggunakan corak Pemerhati apabila anda memerlukan kebergantungan satu-ke-banyak antara objek, satu akan menukar keadaannya dan banyak tanggungan perlu menjejaki perubahan tersebut.

Anggap kita menggunakan SNS seperti X(Twitter), syarikat dan orang ramai mempunyai akaun mereka sendiri, dan orang ramai boleh mengikuti syarikat kegemaran mereka supaya mereka mahukan pemberitahuan apabila syarikat menyiarkan tentang item baharu atau item jualan. Dalam situasi ini, corak Pemerhati boleh digunakan.

Gambar rajah UML

Observer Pattern

Contoh gambarajah UML

Observer Pattern

  • Apabila kaedah setSaleItem dipanggil, iaitu keadaan ditukar, kami memanggil kaedah setItemChanged. Kemudian, kaedah setItemChanged memanggil kaedah notifyAccount.
  • kaedah notifyAccount dalam kelas Syarikat mengulangi setiap pengikut dan kaedah kemas kini panggilan dengan objek Syarikatnya sendiri seperti follower.update(ini)

Pelaksanaan di Jawa

Antara muka syarikat:

public interface ICompany {

    void registerAccount(IAccount account);

    void removeAccount(IAccount account);

    void notifyAccounts();
}

Kelas syarikat:

import java.util.ArrayList;
import java.util.List;

public class Company implements ICompany {

    private List<IAccount> followers;

    private String name;

    private String saleItem;

    public Company(String name) {
        followers = new ArrayList<>();
        this.name = name;
    }

    @Override
    public void registerAccount(IAccount account) {
        this.followers.add(account);
    }

    @Override
    public void removeAccount(IAccount account) {
        this.followers.remove(account);
    }

    @Override
    public void notifyAccounts() {
        for (IAccount follower : followers) {
            follower.update(this);
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSaleItem() {
        return saleItem;
    }

    public void setSaleItem(String saleItem) {
        this.saleItem = saleItem;
        saleItemChanged();
    }

    public void saleItemChanged() {
        notifyAccounts();
    }
}

Antara muka akaun:

public interface IAccount {

    void update(Company company);
}

Kelas akaun:

public class Account implements IAccount {

    private String name;

    public Account(String name) {
        this.name = name;
    }

    @Override
    public void update(Company company) {
        System.out.println(this.name + " receives a new message from " + company.getName());
        System.out.println("New sale item: " + company.getSaleItem());
    }
}

Kelas pelanggan:

public class Client {

    public static void main(String[] args) {
        Company apple = new Company("Apple"); // concrete subject

        IAccount john = new Account("John");
        IAccount david = new Account("David");

        // John starts following Apple Inc.
        apple.registerAccount(john);
        apple.setSaleItem("iPhone 14");
        System.out.println("**********************");

        // David becomes a new follower to Apple Inc.
        apple.registerAccount(david);
        apple.setSaleItem("iPad");
        System.out.println("**********************");

        // John doesn't receive message from Apple Inc. as he deregistered for Apple Inc.
        apple.removeAccount(john);
        apple.setSaleItem("AirPods");
    }
}

Output:

John receives a new message from Apple
New sale item: iPhone 14
**********************
John receives a new message from Apple
New sale item: iPad
David receives a new message from Apple
New sale item: iPad
**********************
David receives a new message from Apple
New sale item: AirPods

Anda boleh menyemak semua pelaksanaan corak reka bentuk di sini.
Repositori GitHub


P.S.
Saya baru menulis blog teknologi, jika anda mempunyai nasihat untuk menambah baik penulisan saya, atau mempunyai sebarang perkara yang mengelirukan, sila tinggalkan komen!
Terima kasih kerana membaca :)

Atas ialah kandungan terperinci Corak Pemerhati. 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