Rumah >Java >javaTutorial >Corak Kilang Abstrak

Corak Kilang Abstrak

Patricia Arquette
Patricia Arquetteasal
2024-11-21 04:59:10168semak imbas

Apakah Corak Kilang Abstrak?

Corak Kilang Abstrak ialah corak ciptaan yang menyediakan antara muka untuk mencipta keluarga objek berkaitan atau bergantung tanpa menyatakan kelas konkritnya.

Bila nak guna?

Gunakan corak kilang Abstrak apabila anda mempunyai keluarga objek yang objek dalam satu keluarga dijangka berfungsi bersama, namun masih mahu memisahkan produk konkrit & kilangnya daripada kod pelanggan.

Masalah

Kami merancang untuk membangunkan aplikasi tema mudah yang pelanggan boleh memilih UI terang atau gelap berdasarkan keutamaan mereka. Kami menyediakan tiga komponen Butang, Menu dan Bar Alat. Setiap komponen mempunyai penampilan gaya terang & gelap.
Jelas sekali kami ingin memastikan semua komponen tema cahaya berfungsi bersama (Kami tidak mahu memaparkan butang terang, menu gelap dan bar alat terang pada masa yang sama). Selain itu, kami ingin mengekalkan kemungkinan untuk menambah tema lain pada masa hadapan seperti tema "Kontras tinggi".

Penyelesaian

Abstract Factory Pattern

  1. Aplikasi Tema
    Ini pelanggan kami. Pembina menerima kilang konkrit sebagai hujahnya, kemudian createComponents() akan mencipta komponen yang sepadan. Pelanggan hanya bergantung pada kilang abstrak & produk abstrak.

  2. ThemeFactory
    Antara muka untuk semua tema konkrit.

  3. Kilang Tema Konkrit
    Menyediakan pelaksanaan sebenar untuk kaedah ThemeFactory. Kilang konkrit ini mencipta produk konkrit.

  4. Antara muka produk
    Antara muka untuk komponen.

  5. Produk konkrit
    Mentakrifkan tingkah laku khusus.

Struktur

Abstract Factory Pattern

Pelaksanaan di Jawa

public interface Button {

    void render();
}
public class DarkButton implements Button{

    @Override
    public void render() {
        System.out.println("Successfully render a dark button");
    }
}
public class LightButton implements Button {

    @Override
    public void render() {
        System.out.println("Successfully render a light button");
    }
}

Anda boleh menulis kod untuk komponen Menu dan Bar Alat dengan cara yang sama.

public interface ThemeFactory {

    Button createButton();

    Menu createMenu();

    Toolbar createToolbar();
}
public class DarkThemeFactory implements ThemeFactory {

    @Override
    public Button createButton() {
        return new DarkButton();
    }

    @Override
    public Menu createMenu() {
        return new DarkMenu();
    }

    @Override
    public Toolbar createToolbar() {
        return new DarkToolbar();
    }
}
public class LightThemeFactory implements ThemeFactory {

    @Override
    public Button createButton() {
        return new LightButton();
    }

    @Override
    public Menu createMenu() {
        return new LightMenu();
    }

    @Override
    public Toolbar createToolbar() {
        return new LightToolbar();
    }
}
// This is our client code, notice client sees neither concrete products nor concrete factories
public class ThemeApplication {

    private ThemeFactory themeFactory;
    private Button button;
    private Menu menu;
    private Toolbar toolbar;

    public ThemeApplication(ThemeFactory factory) {
        themeFactory = factory;
        createComponents();
    }

    public void createComponents() {
        button = themeFactory.createButton();
        menu = themeFactory.createMenu();
        toolbar = themeFactory.createToolbar();
    }

    public void renderComponents() {
        button.render();
        menu.render();
        toolbar.render();
    }
}
public class ThemeApplicationTestDrive {

    public static void main (String[] args) {
        ThemeFactory darkFactory = new DarkThemeFactory();
        ThemeApplication app1 = new ThemeApplication(darkFactory);
        app1.renderComponents();
        System.out.println("*******************");

        ThemeFactory lightFactory = new LightThemeFactory();
        ThemeApplication app2 = new ThemeApplication(lightFactory);
        app2.renderComponents();
    }
}

Output:

Successfully render a dark button
Successfully render a dark menu
Successfully render a dark toolbar
*******************
Successfully render a light button
Successfully render a light menu
Successfully render a light toolbar

Perangkap

  • Lebih kompleks untuk dilaksanakan daripada corak kilang.
  • Menambah produk baharu memerlukan perubahan dalam kilang abstrak & kilang konkrit.

Perbandingan dengan Corak Kilang

  • Corak kilang memisahkan produk konkrit daripada kod pelanggan, manakala corak kilang Abstrak menyembunyikan kilang konkrit serta produk konkrit.
  • Corak kilang berfungsi dengan satu produk & subkelasnya. Sebaliknya, corak kilang Abstrak sesuai apabila pelbagai produk dijangka berfungsi bersama.

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 Kilang Abstrak. 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