Corak penghias boleh dilaksanakan dalam rangka kerja Java dalam tiga cara berikut: 1. Penghias antara muka: Cipta kelas baharu yang melaksanakan antara muka khusus dan menambah gelagat pada kelas sedia ada. 2. Penghias kelas: Cipta kelas baharu yang diwarisi daripada kelas sedia ada dan tambah gelagat baharu. 3. Penghias anotasi: Gunakan anotasi untuk melanjutkan kelas sedia ada dan menambah gelagat melalui anotasi tersuai. Corak ini digunakan secara meluas dalam rangka kerja pengelogan, seperti menapis log atau menambah cap masa.
Cara melaksanakan corak penghias dalam rangka kerja Java
Corak penghias ialah corak reka bentuk struktur yang membolehkan anda menambah fungsi baharu secara dinamik pada objek tanpa mengubah suai kelas asal. Dalam rangka kerja Java, corak penghias mempunyai kaedah pelaksanaan berikut:
1. Penghias antara muka
Kaedah pelaksanaan ini memanjangkan kelas sedia ada dengan mencipta kelas baharu yang melaksanakan antara muka tertentu. Kelas baharu boleh menambah gelagat tambahan pada kelas sedia ada tanpa mengubah suai kod kelas sedia ada.
public interface Shape { void draw(); } public class Rectangle implements Shape { @Override public void draw() { System.out.println("Drawing a rectangle"); } } public class DecoratedRectangle implements Shape { private Shape shape; public DecoratedRectangle(Shape shape) { this.shape = shape; } @Override public void draw() { shape.draw(); System.out.println("Adding extra decoration to rectangle"); } }
2. Penghias Kelas
Pelaksanaan ini melanjutkan kelas sedia ada dengan mencipta kelas baharu yang diwarisi daripada kelas sedia ada dan menambah gelagat baharu.
public class Shape { public void draw() { System.out.println("Drawing a shape"); } } public class DecoratedShape extends Shape { @Override public void draw() { super.draw(); System.out.println("Adding extra decoration to shape"); } }
3. Penghias Anotasi
Pelaksanaan ini menggunakan anotasi Java untuk melanjutkan kelas sedia ada. Tingkah laku baharu boleh ditambah dengan membuat anotasi tersuai dan kemudian menggunakan anotasi pada kelas sedia ada.
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Decorated { String value(); } public class Shape { public void draw() { System.out.println("Drawing a shape"); } } @Decorated("rectangle") public class Rectangle extends Shape { @Override public void draw() { super.draw(); System.out.println("Drawing a rectangle"); } }
Kes praktikal
Dalam rangka kerja pengelogan, corak penghias digunakan untuk menambah fungsi tambahan pada log, seperti menapis, menambah cap masa atau menghantar log ke destinasi yang berbeza. Sebagai contoh, yang berikut menunjukkan kes praktikal corak penghias menggunakan rangka kerja Log4j:
import org.apache.log4j.Logger; import org.apache.log4j.Layout; import org.apache.log4j.Appender; import org.apache.log4j.varia.LevelMatchFilter; public class MyLoggingAppender extends AppenderSkeleton { private Appender appender; public MyLoggingAppender(Layout layout, Appender appender) { super(layout); this.appender = appender; } @Override public void close() { appender.close(); } @Override public boolean requiresLayout() { return false; } @Override protected void append(LoggingEvent event) { if (LevelMatchFilter()) { appender.doappend(new LoggingEvent(event.getLoggerName(), event.getLevel(), event.getMessage(), event.getThreadName(), event.getTimeStamp(), event.getLocationInfo(), event.getThrowableInformation(), event.getNDC(), event.getMDCCopy())); } } }
Dalam kes ini, kelas MyLoggingAppender
ialah penghias yang memanjangkan kelas Appender dengan menambahkan fungsi penapisan. Ia menghantar peristiwa log ke Appender asal, tetapi hanya jika peristiwa log sepadan dengan penapis yang ditentukan.
Ringkasnya, dengan menggunakan corak penghias, anda boleh memanjangkan kefungsian objek Java tanpa mengubah suai kelas asal, dengan itu meningkatkan kebolehskalaan dan fleksibiliti kod.
Atas ialah kandungan terperinci Apakah kaedah pelaksanaan corak penghias dalam rangka kerja java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!