Singleton dan Kaedah Kilang
Laksanakan corak Singleton untuk tika unik dan Kaedah Kilang untuk penciptaan objek yang fleksibel.
Singleton dan Kaedah Kilang ialah pelajaran Seni Bina Bersih & Corak Reka Bentuk dalam Amalan percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Seni Bina Bersih & Corak Reka Bentuk dalam Amalan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Seni Bina Bersih & Corak Reka Bentuk dalam Amalan merangkumi sejumlah 4 pelajaran.
Pengenalan kepada Pola Penciptaan
Selamat datang ke pelajaran tentang Pola Reka Bentuk Penciptaan! Pola ini berkaitan dengan cara objek dicipta.
Pola ini membantu kita mengurus penghasilan tika objek dengan cara yang menjadikan sistem kita lebih fleksibel dan teguh. Daripada mencipta objek secara terus di setiap tempat, kita menggunakan pola untuk mengawal proses ini.
Singleton: Satu Tika Sahaja
Pola Singleton memastikan sesuatu kelas hanya mempunyai satu tika dan menyediakan titik capaian global kepada tika tersebut.
- Ia berguna untuk sumber yang perlu unik, seperti pengurus konfigurasi atau pencatat.
- Untuk mencapainya, kelas biasanya mempunyai pembina persendirian dan kaedah statik yang mengembalikan tika tunggal itu.
Membina Singleton Asas
Berikut ialah contoh mudah Singleton. Perhatikan pembina private dan kaedah static getInstance().
Kaedah getInstance() menyemak sama ada tika sudah wujud; jika belum, kaedah itu menciptanya. Jika tidak, tika yang sedia ada dikembalikan.
public class SimpleLogger {
private static SimpleLogger instance;
// Private constructor to prevent direct instantiation
private SimpleLogger() {
System.out.println("SimpleLogger instance created!");
}
public static SimpleLogger getInstance() {
if (instance == null) {
instance = new SimpleLogger();
}
return instance;
}
public void log(String message) {
System.out.println("LOG: " + message);
}
}
public class Main {
public static void main(String[] args) {
SimpleLogger logger1 = SimpleLogger.getInstance();
logger1.log("Application starting up.");
SimpleLogger logger2 = SimpleLogger.getInstance();
logger2.log("Processing user request.");
if (logger1 == logger2) {
System.out.println("Both logger references point to the same instance!");
}
}
}Singleton: Capaian Selamat Benang
Singleton asas boleh menghadapi masalah dalam persekitaran berbilang benang. Jika berbilang benang memanggil getInstance() pada masa yang sama ketika instance ialah null, lebih daripada satu tika mungkin dicipta.
Kita boleh menjadikannya selamat benang dengan menggunakan kata kunci synchronized pada kaedah getInstance(). Ini memastikan hanya satu benang boleh melaksanakannya pada satu-satu masa.
public class ThreadSafeLogger {
private static ThreadSafeLogger instance;
private ThreadSafeLogger() {
System.out.println("ThreadSafeLogger instance created!");
}
public static synchronized ThreadSafeLogger getInstance() {
if (instance == null) {
instance = new ThreadSafeLogger();
}
return instance;
}
public void log(String message) {
System.out.println("TS_LOG: " + message);
}
}
public class Main {
public static void main(String[] args) {
// In a real app, threads would access this concurrently.
// Here, we just show it works correctly sequentially.
ThreadSafeLogger tsLogger1 = ThreadSafeLogger.getInstance();
tsLogger1.log("Task A completed.");
ThreadSafeLogger tsLogger2 = ThreadSafeLogger.getInstance();
tsLogger2.log("Task B started.");
if (tsLogger1 == tsLogger2) {
System.out.println("Thread-safe instances are the same!");
}
}
}Kes Penggunaan Singleton
Bilakah anda patut mempertimbangkan penggunaan pola Singleton?
- Pengurus Konfigurasi: Untuk menyimpan tetapan aplikasi dan memastikan semua bahagian aplikasi menggunakan tetapan yang sama.
- Pencatat: Untuk menyediakan satu perkhidmatan pencatatan bagi menulis peristiwa aplikasi.
- Kolam Sambungan Pangkalan Data: Untuk mengurus sekumpulan sambungan pangkalan data yang terhad dengan cekap di seluruh aplikasi.
Masalah: Penciptaan Berkod Keras
Sekarang, mari kita lihat pola Kaedah Kilang. Bayangkan anda mempunyai kod yang mencipta objek secara terus, seperti new Car() atau new Truck().
Apakah yang berlaku jika anda perlu menambah jenis kenderaan baharu atau mengubah cara Car dicipta? Anda perlu mencari dan mengemas kini setiap tempat dalam kod yang mencipta objek ini. Hal ini menjadikan kod anda kaku dan sukar diselenggara!
Kaedah Kilang: Mengabstrakkan Penciptaan
Pola Kaedah Kilang menyelesaikan masalah ini dengan mentakrifkan antara muka atau kelas abstrak untuk mencipta objek, tetapi membenarkan subkelas menentukan kelas yang hendak ditikakan.
- Ia menyerahkan penciptaan objek kepada kaedah 'kilang' khusus.
- Ini menggalakkan gandingan longgar dengan membolehkan kod klien berfungsi dengan antara muka dan bukannya kelas konkrit.
Membina dengan Kaedah Kilang
Mari kita cipta sistem untuk pelbagai jenis pengangkutan. Kita mentakrifkan antara muka Transport, kelas pengangkutan konkrit, kemudian TransportFactory dengan kaedah kilang.
Setiap kilang khusus (contohnya, CarFactory) mengetahui cara mencipta produknya sendiri.
// Product Interface
interface Transport {
void deliver();
}
// Concrete Products
class Truck implements Transport {
@Override
public void deliver() {
System.out.println("Deliver by land in a truck.");
}
}
class Ship implements Transport {
@Override
public void deliver() {
System.out.println("Deliver by sea in a ship.");
}
}
// Creator Interface (with Factory Method)
abstract class Logistics {
public void planDelivery() {
Transport t = createTransport();
t.deliver();
}
// The Factory Method
public abstract Transport createTransport();
}
// Concrete Creators
class RoadLogistics extends Logistics {
@Override
public Transport createTransport() {
return new Truck();
}
}
class SeaLogistics extends Logistics {
@Override
public Transport createTransport() {
return new Ship();
}
}
public class Main {
public static void main(String[] args) {
Logistics roadLogistics = new RoadLogistics();
roadLogistics.planDelivery(); // Outputs: Deliver by land in a truck.
Logistics seaLogistics = new SeaLogistics();
seaLogistics.planDelivery(); // Outputs: Deliver by sea in a ship.
}
}Kelebihan Kaedah Kilang
Pola Kaedah Kilang membawa beberapa manfaat utama kepada reka bentuk perisian anda:
- Gandingan Longgar: Kod klien anda hanya berinteraksi dengan antara muka
Logistics, bukannya kelasTruckatauShiptertentu. - Kebolehkembangan: Anda boleh menambah jenis pengangkutan baharu dengan mudah (contohnya,
AirLogisticsdenganPlane) tanpa mengubahLogisticsatau kod klien sedia ada. - Tanggungjawab Tunggal: Tanggungjawab mencipta objek dipindahkan kepada kelas atau kaedah kilang khusus.
Uji Pengetahuan Anda
Mari kita uji pemahaman anda tentang pola Singleton dan Kaedah Kilang.
Imbas Kembali: Singleton & Kilang
Tahniah! Dalam pelajaran ini, kita telah meneroka dua pola reka bentuk penciptaan yang berkuasa:
- Singleton: Memastikan sesuatu kelas hanya mempunyai satu tika dan menyediakan titik capaian global. Ingat untuk mempertimbangkan keselamatan benang!
- Kaedah Kilang: Menyerahkan penciptaan objek kepada subkelas, menggalakkan gandingan longgar dan menjadikan kod anda lebih mudah dikembangkan.
Pola ini ialah asas penting untuk membina perisian yang fleksibel dan mudah diselenggara. Seterusnya, kita akan mendalami pola penciptaan lain seperti Kilang Abstrak dan Pembina!
Pelajari Seni Bina Bersih & Corak Reka Bentuk dalam Amalan dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Singleton dan Kaedah Kilang” percuma?
Ya — teks penuh “Singleton dan Kaedah Kilang” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Seni Bina Bersih & Corak Reka Bentuk dalam Amalan, tingkat taraf kepada CoddyKit PRO. Kursus Seni Bina Bersih & Corak Reka Bentuk dalam Amalan merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Singleton dan Kaedah Kilang”?
Laksanakan corak Singleton untuk tika unik dan Kaedah Kilang untuk penciptaan objek yang fleksibel. Anda berlatih Seni Bina Bersih & Corak Reka Bentuk dalam Amalan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Seni Bina Bersih & Corak Reka Bentuk dalam Amalan?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Seni Bina Bersih & Corak Reka Bentuk dalam Amalan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Singleton dan Kaedah Kilang” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Seni Bina Bersih & Corak Reka Bentuk dalam Amalan ini?
Ya. Setiap pelajaran Seni Bina Bersih & Corak Reka Bentuk dalam Amalan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Singleton dan Kaedah Kilang
- Kilang Abstrak dan Pembina
- Prototaip dan Kumpulan Objek
- Suntikan Kebergantungan sebagai Teknik Penciptaan