Corak Kilang Abstrak ialah corak ciptaan yang menyediakan antara muka untuk mencipta keluarga objek berkaitan atau bergantung tanpa menyatakan kelas konkritnya.
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.
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".
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.
ThemeFactory
Antara muka untuk semua tema konkrit.
Kilang Tema Konkrit
Menyediakan pelaksanaan sebenar untuk kaedah ThemeFactory. Kilang konkrit ini mencipta produk konkrit.
Antara muka produk
Antara muka untuk komponen.
Produk konkrit
Mentakrifkan tingkah laku khusus.
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
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!