一、簡單工廠模式
特點:
1、它是一個具體的類,非接口 抽象類。有一個重要的create()方法,利用if或者 switch創(chuàng)建產(chǎn)品并返回。
2、create()方法通常是靜態(tài)的,所以也稱之為靜態(tài)工廠。
缺點:
1、擴展性差(我想增加一種面條,除了新增一個面條產(chǎn)品類,還需要修改工廠類方法)。
2、不同的產(chǎn)品需要不同額外參數(shù)的時候 不支持。
二、工廠方法模式
模式描述:
提供一個用于創(chuàng)建對象的接口(工廠接口),讓其實現(xiàn)類(工廠實現(xiàn)類)決定實例化哪一個類(產(chǎn)品類),并且由該實現(xiàn)類創(chuàng)建對應類的實例。
模式要素:
提供一個產(chǎn)品類的接口。產(chǎn)品類均要實現(xiàn)這個接口(也可以是abstract類,即抽象產(chǎn)品)。
提供一個工廠類的接口。工廠類均要實現(xiàn)這個接口(即抽象工廠)。
由工廠實現(xiàn)類創(chuàng)建產(chǎn)品類的實例。工廠實現(xiàn)類應有一個方法,用來實例化產(chǎn)品類。
三、抽象工廠模式
模式描述:
為創(chuàng)建一組相關(guān)或相互依賴的對象提供一個接口,而且無需指定他們的具體類。
四、區(qū)別
抽象工廠模式是工廠方法模式的升級版本,他用來創(chuàng)建一組相關(guān)或者相互依賴的對象。
它與工廠方法模式的區(qū)別就在于,工廠方法模式針對的是一個產(chǎn)品等級結(jié)構(gòu);而抽象工廠模式則是針對的多個產(chǎn)品等級結(jié)構(gòu)。
在編程中,通常一個產(chǎn)品結(jié)構(gòu),表現(xiàn)為一個接口或者抽象類,也就是說,工廠方法模式提供的所有產(chǎn)品都是衍生自同一個接口或抽象類,而抽象工廠模式所提供的產(chǎn)品則是衍生自不同的接口或抽象類。
在抽象工廠模式中,有一個產(chǎn)品族的概念:所謂的產(chǎn)品族,是指位于不同產(chǎn)品等級結(jié)構(gòu)中功能相關(guān)聯(lián)的產(chǎn)品組成的家族。抽象工廠模式所提供的一系列產(chǎn)品就組成一個產(chǎn)品族;而工廠方法提供的一系列產(chǎn)品稱為一個等級結(jié)構(gòu)。
推薦教程:Java教程
Atas ialah kandungan terperinci java中抽象工廠模式與工廠方法模式的區(qū)別. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pra-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless scenarios.tyvelopecosyste,

HTTP Log Middleware di GO boleh merakam kaedah permintaan, laluan, IP klien dan memakan masa. 1. Gunakan http.handlerfunc untuk membungkus pemproses, 2. Rekod waktu mula dan masa akhir sebelum dan selepas memanggil next.servehttp, 3. Dapatkan IP pelanggan sebenar melalui r.remoteaddr dan X-forward-for headers, 4. Gunakan log.printf untuk mengeluarkan log permintaan, 5. Kod sampel lengkap telah disahkan untuk dijalankan dan sesuai untuk memulakan projek kecil dan sederhana. Cadangan lanjutan termasuk menangkap kod status, menyokong log JSON dan meminta penjejakan ID.

Memilih jenis htmlinput yang betul dapat meningkatkan ketepatan data, meningkatkan pengalaman pengguna, dan meningkatkan kebolehgunaan. 1. Pilih jenis input yang sepadan mengikut jenis data, seperti teks, e -mel, tel, nombor dan tarikh, yang secara automatik boleh menyemak dan menyesuaikan diri dengan papan kekunci; 2. Gunakan HTML5 untuk menambah jenis baru seperti URL, Warna, Julat dan Carian, yang dapat memberikan kaedah interaksi yang lebih intuitif; 3. Gunakan pemegang tempat dan sifat -sifat yang diperlukan untuk meningkatkan kecekapan dan ketepatan pengisian bentuk, tetapi harus diperhatikan bahawa pemegang tempat tidak dapat menggantikan label.

GradleisthebetterChoiceFormostNewProjectSduetoitSsuperiorflexibility, Prestasi, danModernToolingSupport.1.Gradle'sGroovy/KOT lindslismoreconciseandexpressivethanmaven'sverbosexml.2.GradleOutPerformsMaveninBuildSpeedWithIncrementalcompilation, BuildCac

Menggunakan perpustakaan OpencSV adalah pilihan terbaik untuk membaca fail CSV. Ia boleh mengendalikan situasi yang kompleks dan menyokong pelbagai ciri; 2. Untuk fail CSV yang mudah, anda boleh menggunakan bufferedreader terbina dalam Java yang digabungkan dengan kaedah perpecahan; 3. Jika anda memerlukan kawalan format yang lebih fleksibel atau telah menggunakan komponen Apache, anda boleh memilih Apache Commonscsv. OpenCSV disyorkan untuk kesederhanaan, keteguhan dan keupayaan untuk menangani masalah CSV dalam senario sebenar.

First,checkiftheFnkeysettingisinterferingbytryingboththevolumekeyaloneandFn volumekey,thentoggleFnLockwithFn Escifavailable.2.EnterBIOS/UEFIduringbootandenablefunctionkeysordisableHotkeyModetoensurevolumekeysarerecognized.3.Updateorreinstallaudiodriv

Gunakan kaedah .equals () untuk membandingkan kandungan rentetan, kerana == hanya membandingkan rujukan objek dan bukannya kandungan; 1. Gunakan .equals () untuk membandingkan nilai rentetan sama rata; 2. Gunakan .equalsignorecase () untuk membandingkan kes mengabaikan; 3. Gunakan .compareto () untuk membandingkan rentetan dalam urutan kamus, mengembalikan 0, nombor negatif atau positif; 4. Gunakan .CompareToignorecase () untuk membandingkan kes mengabaikan; 5. Gunakan Objects.Equals () atau kaedah panggilan selamat untuk memproses rentetan null untuk mengelakkan pengecualian penunjuk null. Singkatnya, anda harus mengelakkan menggunakan == untuk perbandingan kandungan rentetan melainkan jika ia perlu secara jelas untuk memeriksa sama ada objek itu berada dalam fasa.

Menggunakan string.join () (java8) adalah kaedah yang paling mudah disyorkan untuk menyambungkan tatasusunan rentetan, hanya tentukan pemisah secara langsung; 2. Untuk versi lama Java atau apabila lebih banyak kawalan diperlukan, anda boleh menggunakan StringBuilder untuk secara manual melintasi dan bersembunyi; 3. Stringjoiner sesuai untuk senario yang memerlukan format yang lebih fleksibel seperti awalan dan akhiran; 4. Menggunakan Arrays.Stream () digabungkan dengan pengumpul.joining () sesuai untuk penapisan atau menukar array sebelum menyertai; Untuk meringkaskan, jika Java8 dan ke atas digunakan, kaedah string.join () harus lebih disukai dalam kebanyakan kes, yang ringkas dan mudah dibaca, tetapi untuk logik yang kompleks, ia disyorkan.
