Jadual Kandungan
2. Prinsip Terbuka/Ditutup (OCP)
3. Prinsip Penggantian Liskov (LSP)
4. Prinsip Pengasingan Antara Muka (ISP)
5. Prinsip Penyongsangan Ketergantungan (DIP)
Pemikiran terakhir
Rumah Java javaTutorial Prinsip Pepejal dijelaskan untuk pemaju Java

Prinsip Pepejal dijelaskan untuk pemaju Java

Jul 26, 2025 am 05:16 AM
java Prinsip Pepejal

Prinsip Tanggungjawab Tunggal (SRP) memerlukan kelas untuk bertanggungjawab untuk hanya satu fungsi, seperti memisahkan penjimatan dan penghantaran mel dalam pemprosesan urutan; 2. Prinsip Pembukaan dan Penutupan (OCP) memerlukan pembukaan dan penutup untuk sambungan dan penutupan untuk pengubahsuaian, seperti menambah grafik baru melalui antara muka bentuk tanpa mengubahsuai kalkulator; 3. Prinsip Penggantian Richter (LSP) memerlukan subkelas boleh menggantikan kelas induk tanpa memusnahkan program, seperti menggunakan kelas bebas untuk mengelakkan kelainan tingkah laku yang disebabkan oleh segi empat tepat warisan persegi; 4. Prinsip Pengasingan Antara Muka (ISP) menghendaki pelanggan tidak boleh bergantung pada antara muka yang tidak diingini, seperti memisahkan antara muka peranti pelbagai fungsi untuk percetakan bebas, pengimbasan, dan antara muka faks; 5. Prinsip Inversi Ketergantungan (DIP) memerlukan modul peringkat tinggi tidak bergantung pada modul peringkat rendah, dan kedua-duanya bergantung kepada abstraksi, seperti pesanan pesanan bergantung kepada antara muka pangkalan data dan bukannya pelaksanaan konkrit. Lima prinsip ini bersama -sama meningkatkan pemeliharaan, kebolehpercayaan dan kesesuaian kod Java.

Prinsip Pepejal dijelaskan untuk pemaju Java

Prinsip-prinsip pepejal adalah satu set lima prinsip reka bentuk yang bertujuan untuk membuat reka bentuk perisian lebih mudah difahami, fleksibel, dan dikekalkan-terutamanya dalam pengaturcaraan berorientasikan objek. Bagi pemaju Java, memohon pepejal membantu membina sistem yang lebih mudah untuk melanjutkan, menguji, dan reflektor. Mari kita memecahkan setiap prinsip dengan contoh Java praktikal dan penjelasan yang jelas.

Prinsip Pepejal dijelaskan untuk pemaju Java

1. Prinsip Tanggungjawab Tunggal (SRP)

Kelas sepatutnya hanya mempunyai satu sebab untuk berubah.

Dalam erti kata lain, kelas harus bertanggungjawab untuk satu bahagian fungsi aplikasi. Jika kelas mengendalikan pelbagai tugas, menukar seseorang mungkin memecahkan yang lain.

Prinsip Pepejal dijelaskan untuk pemaju Java

Contoh (pelanggaran):

 Pesanan Kelas Awam {
    ProcessOrder void awam (pesanan pesanan) {
        // Simpan pesanan ke pangkalan data
        SaveTodatabase (perintah);

        // Hantar e -mel pengesahan
        sendeMail (order.getCustomeReMail ());
    }

    saveTodatabase saveTodatabase (pesanan) { / * ... /}
    Sendemail void peribadi (e -mel rentetan) { / * ... * /}
}

Di sini, OrderProcessor mengendalikan kedua -dua kegigihan data dan komunikasi -dua tanggungjawab.

Prinsip Pepejal dijelaskan untuk pemaju Java

Refactored (patuh SRP):

 Pesanan Kelas Awam {
    void awam simpan (pesanan pesanan) { / * ... * /}
}

e -melservice kelas awam {
    public void SendConfirmation (string e -mel) { / * ... * /}
}

Pesanan Kelas Awam {
    repositori perintah swasta;
    E -melService EmailService Private;

    ProcessOrder void awam (pesanan pesanan) {
        repositori.save (perintah);
        e -melService.SendConfirmation (Order.GetCustomereMail ());
    }
}

Sekarang setiap kelas mempunyai satu pekerjaan. Perubahan kepada logik e -mel tidak akan menjejaskan penjimatan data.


2. Prinsip Terbuka/Ditutup (OCP)

Entiti perisian hendaklah dibuka untuk lanjutan, tetapi ditutup untuk pengubahsuaian.

Anda sepatutnya dapat menambah fungsi baru tanpa menukar kod sedia ada.

Contoh (pelanggaran):

 Kawasan Kelas Awam {
    awam calculatearea (Senarai <belect> bentuk) {
        Jumlah dua = 0;
        untuk (bentuk objek: bentuk) {
            jika (bentuk contoh bulatan) {
                Bulatan c = (bulatan) bentuk;
                total = math.pi * c.radius * c.radius;
            } else if (bentuk contoh segi empat tepat) {
                Segi empat tepat r = (segi empat tepat) bentuk;
                total = r.width * r.height;
            }
        }
        jumlah pulangan;
    }
}

Setiap kali anda menambah bentuk baru, anda mesti mengubah suai kaedah ini.

Refactored (patuh OCP):

 Bentuk Antara Muka Awam {
    kawasan berganda ();
}

Lingkaran Kelas Awam mengimplementasikan bentuk {
    jejari berganda peribadi;
    kawasan double public () {return math.pi * radius * radius; }
}

Kelas Rectangle Public mengimplementasikan bentuk {
    lebar ganda peribadi, ketinggian;
    kawasan double public () {return width * ketinggian; }
}

Kawasan Kelas Awam {
    calculatearea double public (Senarai <bentuk> bentuk) {
        kembali bentuk.stream ()
                     .maptodouble (bentuk :: kawasan)
                     .sum ();
    }
}

Sekarang anda boleh menambah bentuk baru (misalnya, segitiga) tanpa menyentuh AreaCalculator .


3. Prinsip Penggantian Liskov (LSP)

Subtipe mesti digantikan untuk jenis asas mereka tanpa mengubah ketepatan program.

Sekiranya kelas mewarisi dari yang lain, ia tidak sepatutnya memecahkan tingkah laku yang diharapkan.

Contoh (pelanggaran):

 Rectangle Kelas Awam {
    lebar int yang dilindungi, ketinggian;

    public void setWidth (int width) {this.width = width; }
    public void setHeight (int height) {this.height = height; }

    public int getArea () {return width * Height; }
}

Square kelas awam memanjangkan segi empat tepat {
    @Override
    public void setWidth (int width) {
        super.setWidth (lebar);
        super.setheight (lebar);
    }

    @Override
    public void setetheight (ketinggian int) {
        super.setheight (ketinggian);
        super.setWidth (ketinggian);
    }
}

Sekarang, jika kaedah menjangkakan Rectangle dan menetapkan lebar dan ketinggian secara bebas, menggunakan rehat Square yang anda anggap.

Pendekatan yang lebih baik: Elakkan warisan apabila kontrak tingkah laku adalah ganas. Gunakan komposisi atau hierarki berasingan.

 Bentuk Antara Muka Awam {
    kawasan int ();
}

Kelas Rectangle Public mengimplementasikan bentuk {
    lebar int swasta, ketinggian;
    // setter dan kawasan ()
}

Public Class Square mengimplementasikan bentuk {
    bahagian int persendirian;
    // kawasan = sisi * sisi
}

Sekarang, tidak ada warisan yang mengelirukan. LSP dipelihara.


4. Prinsip Pengasingan Antara Muka (ISP)

Pelanggan tidak boleh dipaksa bergantung pada antara muka yang tidak mereka gunakan.

Antara muka besar, monolitik membuat kelas melaksanakan kaedah yang mereka tidak perlukan.

Contoh (pelanggaran):

 Mesin Antara Muka Awam {
    void print ();
    tidak sah imbasan ();
    void faks ();
}

Kelas Awam OldPrinter melaksanakan mesin {
    cetak void awam () {System.out.println ("Percetakan"); }
    imbasan tidak sah awam () {membuang baru yang tidak disokongOperationException (); }
    public void faks () {membuang baru UnsupportedOperationException (); }
}

OldPrinter terpaksa melaksanakan kaedah yang tidak relevan.

Refactored (ISP Compliant):

 pencetak antara muka awam {
    void print ();
}

Pengimbas Antara Muka Awam {
    tidak sah imbasan ();
}

antara muka awam FaxMachine {
    void faks ();
}

OldPrinter kelas awam melaksanakan pencetak {
    cetak void awam () {System.out.println ("Percetakan"); }
}

kelas awam MultifunctionDevice melaksanakan pencetak, pengimbas, faxmachine {
    cetak void awam () { / * ... * /}
    imbasan tidak sah awam () { / * ... * /}
    public void fax () { / * ... * /}
}

Sekarang, kelas melaksanakan hanya apa yang mereka dukung.


5. Prinsip Penyongsangan Ketergantungan (DIP)

Modul peringkat tinggi tidak boleh bergantung kepada modul peringkat rendah. Kedua -duanya bergantung kepada abstraksi.

Juga: Abstraksi tidak boleh bergantung kepada butiran. Butiran harus bergantung kepada abstraksi.

Ini membolehkan gandingan longgar dan ujian yang lebih mudah.

Contoh (pelanggaran):

 Pesanan Pesanan Kelas Awam {
    Pangkalan data mysqldatabase peribadi = mysqldatabase baru ();

    public void saveOrder (pesanan pesanan) {
        pangkalan data.save (pesanan);
    }
}

OrderService ditambah dengan MySQLDatabase . Sukar untuk menguji atau menukar pangkalan data.

Refactored (patuh dip):

 Pangkalan Data Antara Muka Awam {
    tidak sah SAVE (pesanan pesanan);
}

kelas awam mysqldatabase melaksanakan pangkalan data {
    void awam simpan (pesanan pesanan) { / * ... * /}
}

Pesanan Pesanan Kelas Awam {
    pangkalan data pangkalan data peribadi;

    Pesanan Pesanan Awam (pangkalan data pangkalan data) {
        this.database = pangkalan data;
    }

    public void saveOrder (pesanan pesanan) {
        pangkalan data.save (pesanan);
    }
}

Sekarang OrderService bergantung pada antara muka Database . Anda boleh menyuntik sebarang pelaksanaan (MySQL, PostgreSQL, Mock, dll.).

Digunakan dengan kerangka suntikan ketergantungan (seperti musim bunga), ini menjadi lebih kuat.


Pemikiran terakhir

Prinsip -prinsip pepejal bukan peraturan tegar -mereka garis panduan untuk membantu anda menulis lebih bersih, lebih banyak kod Java yang dikekalkan. Memohon mereka lebih awal boleh menyelamatkan anda dari hutang teknikal kemudian.

  • SRP : Satu pekerjaan setiap kelas.
  • OCP : Extend, jangan ubah suai.
  • LSP : Subclass tidak boleh mengejutkan pengguna.
  • ISP : Antara muka yang kecil dan terfokus.
  • Dip : Bergantung pada abstraksi, bukan konkrit.

Mereka mungkin berasa seperti berlebihan pada mulanya, terutamanya dalam projek kecil. Tetapi apabila asas kod anda berkembang, prinsip -prinsip ini menjadi alat penting untuk menguruskan kerumitan.

Pada asasnya, jika kelas Java anda sukar untuk menguji, mengubah, atau menggunakan semula, satu atau lebih prinsip yang kukuh adalah ganas.

Atas ialah kandungan terperinci Prinsip Pepejal dijelaskan untuk pemaju Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Lengkap ke kelas Java `Pilihan` Panduan Lengkap ke kelas Java `Pilihan` Jul 27, 2025 am 12:22 AM

Pilihan adalah kelas kontena yang diperkenalkan oleh Java 8 untuk pengendalian yang lebih selamat dari nilai -nilai yang berpotensi null, dengan tujuan terasnya adalah dengan jelas "nilai hilang" dan mengurangkan risiko nullPointerexception. 1. Buat contoh kosong menggunakan optional.empty (), optional.of (nilai) membungkus nilai non-null, dan optional.ofnullable (nilai) dengan selamat membungkus nilai null. 2. Elakkan menggabungkan ispresent () dan dapatkan () secara langsung. Anda harus memberi keutamaan untuk menggunakan Orelse () untuk memberikan nilai lalai. Orelseget () melaksanakan pengiraan kelewatan. Kaedah ini disyorkan apabila nilai lalai adalah overhead.

Membaca dari Stdin dalam Contoh Membaca dari Stdin dalam Contoh Jul 27, 2025 am 04:15 AM

Gunakan fmt.scanf untuk membaca input diformat, sesuai untuk data berstruktur yang mudah, tetapi rentetan dipotong ketika menghadapi ruang; 2. Adalah disyorkan untuk menggunakan bufio.scanner untuk membaca garis demi baris, menyokong input berbilang baris, pengesanan EOF dan input saluran paip, dan boleh mengendalikan kesilapan pengimbasan; 3. Gunakan io.readall (os.stdin) untuk membaca semua input sekaligus, sesuai untuk memproses data blok besar atau aliran fail; 4. Sambutan utama masa nyata memerlukan perpustakaan pihak ketiga seperti golang.org/x/term, dan Bufio mencukupi untuk senario konvensional; Cadangan Praktikal: Gunakan fmt.scan untuk input mudah interaktif, gunakan bufio.scanner untuk input baris atau saluran paip, gunakan io.readall untuk data blok besar, dan sentiasa mengendalikan

Pilihan pengkomputeran tanpa pelayan SQL Pilihan pengkomputeran tanpa pelayan SQL Jul 27, 2025 am 03:07 AM

SQLServer sendiri tidak menyokong seni bina tanpa pelayan, tetapi platform awan menyediakan penyelesaian yang sama. 1. Kolam ServerlessSQL Azure boleh secara langsung menanyakan fail Datalake dan caj berdasarkan penggunaan sumber; 2. 3. Awsathena menyokong pertanyaan SQL standard untuk data S3, dan caj berdasarkan data yang diimbas; 4. GooglebigQuery mendekati konsep tanpa pelayan melalui FederatedQuery; 5. Sekiranya anda mesti menggunakan fungsi SQLServer, anda boleh memilih perkhidmatan tanpa pelayan AzuresqLdatabase

Python semak jika kunci wujud dalam contoh kamus Python semak jika kunci wujud dalam contoh kamus Jul 27, 2025 am 03:08 AM

Adalah disyorkan untuk menggunakan kata kunci untuk memeriksa sama ada kunci wujud dalam kamus, kerana ia adalah ringkas, cekap dan sangat mudah dibaca; 2. Ia tidak disyorkan untuk menggunakan kaedah GET () untuk menentukan sama ada kunci wujud, kerana ia akan salah apabila kunci wujud tetapi nilai tidak ada; 3. Anda boleh menggunakan kaedah kekunci (), tetapi ia berlebihan, kerana secara lalai untuk memeriksa kunci; 4. Apabila anda perlu mendapatkan nilai dan kunci yang dijangkakan biasanya wujud, anda boleh menggunakan cuba-kecuali untuk menangkap pengecualian KeyError. Kaedah yang paling disyorkan ialah menggunakan kata kunci, yang selamat dan cekap, dan tidak terjejas oleh nilai tiada, yang sesuai untuk kebanyakan senario.

Persediaan VSCode untuk Pembangunan Java Persediaan VSCode untuk Pembangunan Java Jul 27, 2025 am 02:28 AM

Installjdk, setjava_home, InstalljavaextensionPackinvscode, createoropenamaven/gradleProject, memastikanprojectstructure, anduseBuilt-inrun/debugfeatures;

Mengoptimumkan interaksi pangkalan data dalam aplikasi Java Mengoptimumkan interaksi pangkalan data dalam aplikasi Java Jul 27, 2025 am 02:32 AM

Useconnectionpoolingwithhikaricptoreusedatabaseconnectionsandreduceoverhead.2.UsePreparedStatementTopreventsqlinjectionAndroveProveQueryperformance.3.fetchonLyRequiredDataByselectingsPecificColumnSandapplyFilation.4.Se

Corak integrasi awan java dengan awan musim bunga Corak integrasi awan java dengan awan musim bunga Jul 27, 2025 am 02:55 AM

Menguasai model integrasi Springcloud adalah penting untuk membina sistem yang diedarkan moden. 1. Pendaftaran dan Penemuan Perkhidmatan: Pendaftaran dan penemuan perkhidmatan automatik direalisasikan melalui Eureka atau Springcloudkubernetes, dan pengimbangan beban dilakukan dengan reben atau loadbalancer; 2. 3. API Gateway: Gunakan Springcloudgateway untuk menyatukan entri, kawalan penghalaan dan pengurusan kebenaran, dan menyokong pengehadan dan pembalakan semasa; 4. Penjejakan pautan yang diedarkan: Menggabungkan sleuth dan zipkin untuk merealisasikan proses penuh permintaan visual.

Memahami Panggilan Sistem Linux Memahami Panggilan Sistem Linux Jul 27, 2025 am 12:16 AM

Panggilan sistem adalah mekanisme di mana program pengguna meminta operasi istimewa melalui antara muka kernel. Aliran kerja adalah: 1. Program pengguna memanggil fungsi enkapsulasi; 2. Tetapkan nombor panggilan sistem dan parameter kepada daftar; 3. Melaksanakan arahan syscall dan jatuh ke dalam negeri kernel; 4. Melaksanakan fungsi pemprosesan yang sepadan dalam jadual semak; 5. Kembali ke keadaan pengguna selepas pelaksanaan. Anda boleh menggunakan alat Strace untuk mengesan, terus panggil fungsi SYSCall () atau periksa fail header Unitd.H untuk melihat nombor panggilan. Anda perlu ambil perhatian bahawa perbezaan antara panggilan sistem dan fungsi perpustakaan adalah sama ada mereka memasuki keadaan kernel, dan panggilan yang kerap akan menjejaskan prestasi. Anda harus mengoptimumkan dengan menggabungkan I/O, menggunakan kaedah MMAP dan Epoll, dan pemahaman panggilan sistem akan membantu anda menguasai mekanisme operasi asas Linux.

See all articles