Bagaimana menggunakan corak kilang di Jawa?
要使用工厂模式,首先定义一个公共接口Shape,然后创建实现该接口的Circle和Rectangle类;接着创建ShapeFactory工厂类,其中包含根据输入参数返回具体Shape对象的createShape方法;在客户端代码中通过工厂获取对象而非直接使用new;最后通过统一接口调用方法。1. 定义公共接口Shape;2. 实现Circle和Rectangle类;3. 创建ShapeFactory类并实现createShape方法;4. 在客户端使用工厂创建对象并调用draw方法;5. 可选地使用ShapeType枚举提升代码健壮性。该模式通过封装对象创建逻辑、实现松耦合和易于扩展,适用于运行时决定对象类型且需将创建与使用分离的场景,最终使代码更灵活且易于维护。
The factory pattern in Java is a creational design pattern used to create objects without exposing the object creation logic to the client. It provides a way to instantiate objects based on certain conditions, often using a common interface. This makes your code more flexible and easier to extend.

Here’s how to use the factory pattern in Java effectively:
1. Define a Common Interface or Abstract Class
Start by defining a common interface (or abstract class) that all your concrete classes will implement. This allows the factory to return objects that can be treated uniformly.

public interface Shape { void draw(); }
Now, create some concrete classes that implement this interface:
public class Circle implements Shape { @Override public void draw() { System.out.println("Drawing a circle"); } } public class Rectangle implements Shape { @Override public void draw() { System.out.println("Drawing a rectangle"); } }
2. Create the Factory Class
The factory class contains a method (often static) that decides which object to instantiate based on input parameters.

public class ShapeFactory { public Shape createShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); } else if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } return null; // or throw an exception } }
Note: You can make the createShape
method static if you don’t need to maintain state in the factory.
3. Use the Factory in Your Client Code
Instead of using new Circle()
or new Rectangle()
directly, use the factory to get the object.
public class FactoryPatternDemo { public static void main(String[] args) { ShapeFactory factory = new ShapeFactory(); Shape shape1 = factory.createShape("CIRCLE"); shape1.draw(); // Output: Drawing a circle Shape shape2 = factory.createShape("RECTANGLE"); shape2.draw(); // Output: Drawing a rectangle } }
4. Benefits and When to Use
- Loose Coupling: The client doesn’t need to know the exact class of the object being created.
- Easy Extension: You can add new shapes without changing the client code—just update the factory.
- Encapsulation: Object creation logic is centralized.
This pattern is useful when:
- You have multiple subclasses and want to delegate instantiation.
- The exact type of object isn’t known until runtime.
- You want to keep object creation separate from usage.
Optional: Use Enums or Configuration for Cleaner Logic
For better maintainability, especially with many types, consider using enums:
public enum ShapeType { CIRCLE, RECTANGLE } public class ShapeFactory { public Shape createShape(ShapeType type) { switch (type) { case CIRCLE: return new Circle(); case RECTANGLE: return new Rectangle(); default: throw new IllegalArgumentException("Unknown shape type"); } } }
This avoids string comparison bugs and makes the code more robust.
Summary
To use the factory pattern:
- Define a common interface.
- Implement concrete classes.
- Create a factory that returns instances based on input.
- Let clients use the factory instead of
new
.
It’s not complex, but it makes a big difference in larger applications where object creation needs to be managed cleanly.
Atas ialah kandungan terperinci Bagaimana menggunakan corak kilang di Jawa?. 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)

Benang maya mempunyai kelebihan prestasi yang signifikan dalam senario yang sangat konkurensi dan intensif, tetapi perhatian harus dibayar kepada kaedah ujian dan senario yang berkenaan. 1. Ujian yang betul harus mensimulasikan perniagaan sebenar, terutamanya senario menyekat IO, dan menggunakan alat seperti JMH atau Gatling untuk membandingkan benang platform; 2. Jurang throughput adalah jelas, dan boleh beberapa kali hingga sepuluh kali lebih tinggi daripada 100,000 permintaan serentak, kerana ia lebih ringan dan cekap dalam penjadualan; 3. Semasa ujian, adalah perlu untuk mengelakkan membabi buta mengejar nombor konvensional yang tinggi, menyesuaikan diri dengan model IO yang tidak menyekat, dan memberi perhatian kepada petunjuk pemantauan seperti latensi dan GC; 4.

Kunci untuk melaksanakan senarai yang dipautkan adalah untuk menentukan kelas nod dan melaksanakan operasi asas. ①First Buat kelas nod, termasuk data dan rujukan kepada nod seterusnya; ② Kemudian buat kelas LinkedList, melaksanakan fungsi penyisipan, penghapusan dan percetakan; Kaedah tambahan digunakan untuk menambah nod pada ekor; ④ Kaedah PrintList digunakan untuk mengeluarkan kandungan senarai yang dipautkan; ⑤ Kaedah DeletewithValue digunakan untuk memadam nod dengan nilai tertentu dan mengendalikan situasi yang berbeza dari nod kepala dan nod perantaraan.

Tosetjava_homeonwindows, firstlocatethejdkinstallationpath (mis., C: \ Programfiles \ java \ jdk-17), thencreateasystemenvironmentvaria blenamedjava_homewiththatpath.next, updateThePathvariableByadding%java \ _home%\ bin, andverifythesetupingjava-versionandjavac-v

Untuk mengendalikan transaksi JDBC dengan betul, anda mesti terlebih dahulu mematikan mod komit automatik, kemudian melakukan pelbagai operasi, dan akhirnya melakukan atau mengembalikan semula hasilnya; 1. Panggil Conn.SetAutOcommit (palsu) untuk memulakan transaksi; 2. Melaksanakan pelbagai operasi SQL, seperti memasukkan dan mengemaskini; 3. Panggil Conn.Commit () jika semua operasi berjaya, dan hubungi conn.rollback () jika pengecualian berlaku untuk memastikan konsistensi data; Pada masa yang sama, cuba-dengan-sumber harus digunakan untuk menguruskan sumber, mengendalikan pengecualian dengan betul dan menutup sambungan untuk mengelakkan kebocoran sambungan; Di samping itu, adalah disyorkan untuk menggunakan kolam sambungan dan menetapkan mata simpan untuk mencapai rollback separa, dan menyimpan urus niaga sesingkat mungkin untuk meningkatkan prestasi.

ServiceMesh adalah pilihan yang tidak dapat dielakkan untuk evolusi seni bina microservice Java, dan terasnya terletak pada decoupling logik rangkaian dan kod perniagaan. 1. ServiceMesh mengendalikan pengimbangan beban, fius, pemantauan dan fungsi lain melalui agen sidecar untuk memberi tumpuan kepada perniagaan; 2. INTOR ISTIO sesuai untuk projek sederhana dan besar, dan Linkerd lebih ringan dan sesuai untuk ujian berskala kecil; 3. Java microservices harus menutup, reben dan komponen lain dan menyerahkannya kepada Istiod untuk penemuan dan komunikasi; 4. Memastikan suntikan automatik sidecar semasa penempatan, perhatikan konfigurasi peraturan lalu lintas, keserasian protokol, dan pembinaan sistem penjejakan log, dan mengamalkan penghijrahan tambahan dan perancangan pemantauan pra-kawalan.

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

Untuk meningkatkan prestasi Rangka Kerja Koleksi Java, kami dapat mengoptimumkan dari empat mata berikut: 1. Pilih jenis yang sesuai mengikut senario, seperti akses rawak yang kerap ke ArrayList, carian cepat ke hashset, dan serentak untuk persekitaran serentak; 2. Menetapkan kapasiti dan faktor beban yang munasabah semasa permulaan untuk mengurangkan overhead pengembangan kapasiti, tetapi elakkan sisa memori; 3. Gunakan set yang tidak berubah (seperti list.of ()) untuk meningkatkan keselamatan dan prestasi, sesuai untuk data tetap atau baca sahaja; 4. Mencegah kebocoran memori, dan gunakan rujukan lemah atau perpustakaan cache profesional untuk menguruskan set survival jangka panjang. Butiran ini memberi kesan ketara kepada kestabilan dan kecekapan program.

SetupaMaven/gradleprojectwithjax-rsdependencyiSejersey; 2.createarescresourceUsingAnnotationssuchas@pathand@get; 3.configuretheapplicationviaapplicationsubclassorweb.xml;
