


Saya telah bekerja selama lima tahun dan saya masih tidak memahami model fasad!
. : 4px;margin-kanan: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break : break-all;color: rgb(239, 112, 96);">Mod fasad
Diceritakan dengan kisah hidup yang sesuai dan senario projek sebenarCorak reka bentuk
Story
门面模式
。用贴切的生活故事,以及真实项目场景来讲设计模式
,最后用一句话来总结这个设计模式。
故事
开发的朋友都知道,后端开发通常都是:
controller---servie---dao/mapper/repository
但是,我问过很多人,熟悉门面模式不?有的工作五年了都不知道。
今天老田,就带你来看看门面模式。
门面模式概述
门面模式(Facade Pattern
Rakan pembangunan semua tahu bahawa pembangunan back-end biasanya:
🎜 Walau bagaimanapun, saya telah bertanya ramai orang, adakah mereka biasa dengan model fasad? Sesetengah orang telah bekerja selama lima tahun dan tidak tahu. 🎜🎜Hari ini, Lao Tian akan menunjukkan kepada anda mod fasad. 🎜controller---servie---dao/mapper/repository🎜
🎜Mod muka depan (
Corak Fasad
), juga dipanggil mod penampilan, menyediakan antara muka bersatu untuk mengakses sekumpulan antara muka subsistem. Ciri utamanya ialah ia mentakrifkan antara muka peringkat tinggi untuk menjadikan subsistem lebih mudah digunakan, dan ia tergolong dalam corak reka bentuk struktur. 🎜🎜Bahasa Inggeris:🎜Sediakan antara muka bersatu kepada satu set antara muka dalam asubsistem Fasad mentakrifkan antara muka peringkat lebih tinggi yang menjadikan subsistem lebih mudah digunakan
Malah, dalam kerja pengekodan harian kami, kami semua menggunakan corak muka depan secara meluas, dengan sengaja. atau tidak sengaja. Apabila modul peringkat tinggi perlu menjadualkan berbilang subsistem (lebih daripada 2 objek kelas), kami secara sedar akan mencipta kelas baharu untuk merangkum subsistem ini dan menyediakan antara muka yang diperkemas supaya modul peringkat tinggi boleh memanggil fungsi-fungsi ini dengan lebih mudah secara tidak langsung. subsistem.
Kes dalam hidup
Mengenai model fasad, terdapat banyak kes dalam kehidupan.
Kes 1: Apabila anda pergi ke bank untuk mengendalikan perniagaan, terdapat meja depan untuk menerima anda Kemudian, meja depan akan bertanya kepada anda perniagaan apa yang anda perlu lakukan, dan dia akan membawa anda melaluinya satu persatu. supaya kita tidak perlu bersiar-siar dan mencari tetingkap perniagaan yang sepadan. Kakitangan meja depan ini adalah setara dengan model fasad.
Kes 2: Bila kita bina rumah, kalau tak ada kontraktor, kena cari sendiri pekerja simen, juruelektrik, tukang hiasan dll. Tetapi jika anda mempunyai kontraktor, anda tidak perlu melakukan apa-apa tugas ini. Anda boleh memberitahu kontraktor secara langsung bahawa anda memerlukan juruelektrik untuk membaiki pendawaian. Kontraktor ini boleh difahami sebagai model fasad.
Kes 3: controller
,也可以理解为门面模式,比如说获取用户账户信息,先查UserService
获取用户信息,然后查UserAccountService
Maklumat akaun pengguna yang dibangunkan oleh bahagian belakang kami.
Senario yang boleh digunakan untuk mod fasad
Dalam sistem perisian, mod fasad sesuai untuk senario aplikasi berikut.
Menyediakan antara muka yang mudah untuk akses luaran kepada modul atau subsistem yang kompleks. Apabila anda ingin meningkatkan kebebasan subsistem. Apabila subsistem mungkin mengalami pepijat atau masalah berkaitan prestasi disebabkan oleh sebab sementara yang tidak dapat dielakkan, antara muka peringkat tinggi boleh disediakan melalui mod fasad untuk mengasingkan interaksi langsung antara klien dan subsistem untuk mengelakkan pencemaran kod. . Senario perniagaan: Kini anda perlu memanggil kaedah masing-masing bagi tiga perkhidmatan:
public class ServiceA { public void doA(){ System.out.println("do ServiceA"); } } public class ServiceB { public void doB(){ System.out.println("do ServiceB"); } } public class ServiceC { public void doC(){ System.out.println("do ServiceC"); } }
Apabila mod fasad tidak diperkenalkan, pelanggan memanggilnya seperti ini: do ServiceA
do ServiceB
do ServiceC
Salin selepas log masukSalin selepas log masukJom sertai sekarang
: Setiap kali, pelanggan perlu mencipta banyak objek perkhidmatan. Jika terdapat banyak perkhidmatan yang terlibat, tidakkah kod ini menjadi janggal? Akan ada banyak kod berulang. Hasil berjalando ServiceA do ServiceB do ServiceC
public class Facade { //是不是很像我们controller里注入各种service? private ServiceA serviceA = new ServiceA(); private ServiceB serviceB = new ServiceB(); private ServiceC serviceC = new ServiceC(); public void doA() { serviceA.doA(); } public void doB() { serviceB.doB(); } public void doC() { serviceC.doC(); } }
public class Client { public static void main(String[] args) { //轻轻松松的搞定,只需要创建门面这个对象即可 Facade facade=new Facade(); facade.doA(); facade.doB(); facade.doC(); } }
do ServiceA do ServiceB do ServiceC
门面模式
Watak dalam mod fasad
Watak penampilan ( Fasad
): Juga dipanggil peranan fasad, ia adalah antara muka luaran bersatu sistem.Facade
):也叫作门面角色,是系统对外的统一接口。子系统角色( Service
):可以同时有一个或多个Service
。每个Service
都不是一个单独的类,而是一个类的集合。Service
们并不知道Facade
的存在,对于Service们而言,Facade
只是另一个客户端而已(即Facade
对ServiceA
、ServiceB
、ServiceC
Perkhidmatan
) : Boleh ada satu atau lebih Perkhidmatan</code >. Setiap<code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05) ; font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">Perkhidmatan
bukan kelas yang berasingan, tetapi koleksi kelas. Perkhidmatan
orang tidak tahuFasad
hanyalah pelanggan lain (iaitu Fasad
gandingServiceA
, ServiceB
, PerkhidmatanC
telus). Pelanjutan corak fasad
Kelebihan● Mengurangkan saling kebergantungan sistem Fikirkan, jika kita tidak menggunakan mod fasad, akses luaran masuk terus ke dalam subsistem, dan terdapat hubungan gandingan yang kuat di antara mereka. Jika anda mati, saya akan mati, dan jika anda hidup, saya akan hidup pergantungan yang kuat adalah hasil reka bentuk sistem Tidak boleh diterima, kemunculan corak fasad menyelesaikan masalah ini dengan baik. 🎜🎜● Fleksibiliti yang dipertingkatkan Pergantungan dikurangkan dan fleksibiliti secara semula jadi meningkat. Tidak kira bagaimana subsistem berubah secara dalaman, selagi ia tidak menjejaskan objek fasad, anda boleh bergerak dengan bebas. 🎜
● 提高安全性 想让你访问子系统的哪些业务就开通哪些逻辑,不在门面上开通的方法,你休想访问到 。
缺点
当增加子系统和扩展子系统行为时,可能容易带来未知风险。 不符合开闭原则。 某些情况下,可能 违背单一职责原则
。
大神们是如何使用的
在Spring
中也是有大量使用到门面模式,比如说
org.springframework.jdbc.support.JdbcUtils
再来看看其中的方法
public static void closeConnection(@Nullable Connection con) { con.close(); } public static Object extractDatabaseMetaData(DataSource dataSource, DatabaseMetaDataCallback action) throws MetaDataAccessException { Connection con = null; try { con = DataSourceUtils.getConnection(dataSource); DatabaseMetaData metaData = con.getMetaData(); if (metaData == null) { //..... } return action.processMetaData(metaData); } } ......
都是给我封装好了方法,对于我们开发者来说,我只面向JdbcUtils
这一个类就好了,我不用去管Connection
、ResultSet
等是怎么创建的,需要的时候,我调用JdbcUtils
的对应方法即可获得对应的对象。
在Mybatis
中也是用到了门面模式,比如:
org.apache.ibatis.session.Configuration
在Configuration
中以new
开头的方法,比如:
public Executor newExecutor(Transaction transaction) { return newExecutor(transaction, defaultExecutorType); } public MetaObject newMetaObject(Object object) { return MetaObject.forObject(object, objectFactory, objectWrapperFactory, reflectorFactory); } public ParameterHandler newParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) { ... return parameterHandler; } public ResultSetHandler newResultSetHandler(Executor executor, MappedStatement mappedStatement, RowBounds rowBounds, ParameterHandler parameterHandler, ResultHandler resultHandler, BoundSql boundSql) { ... return resultSetHandler; } public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement){ ... }
对于调用这些方法的地方,他并不知道是怎么new
出来的对象,只管使用就行了。
在Tomcat
中也有门面模式,比如:
org.apache.catalina.connector.RequestFacade
从名字就知道它用了门面模式。它封装了非常多的request
操作,也整合了很多servlet-api
以外的内容,给用户使用提供了很大便捷。同样,Tomcat
针对Response
和Session
也封装了对应的ResponseFacade
类和StandardSessionFacade
类,感兴趣的小伙伴可以深入了解一下。
PS
:基本上所有以Facade
结尾的类,都是使用到了门面模式。
Rujukan: Kursus corak reka bentuk Tom
Ringkasan
Baiklah, saya telah berkongsi banyak tentang mod fasad ini, adakah anda merasakan bahawa mod fasad adalah sangat mudah. dan ia juga boleh digunakan di tempat kerja? Pertimbangkan sama ada anda boleh menggunakannya, dan pada masa yang sama, anda juga boleh menggunakannya untuk bercakap besar semasa temuduga.
Atas ialah kandungan terperinci Saya telah bekerja selama lima tahun dan saya masih tidak memahami model fasad!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

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)

Topik panas

Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Apabila menggunakan tkmybatis untuk pertanyaan pangkalan data, bagaimana dengan anggun mendapatkan nama pembolehubah kelas entiti untuk membina keadaan pertanyaan adalah masalah biasa. Artikel ini akan ...

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...
