Rumah > Java > javaTutorial > Apakah prinsip dan kaedah pelaksanaan corak hiasan dalam corak reka bentuk Java?

Apakah prinsip dan kaedah pelaksanaan corak hiasan dalam corak reka bentuk Java?

WBOY
Lepaskan: 2023-04-22 10:52:08
ke hadapan
1129 orang telah melayarinya

1. Apakah mod hiasan?

Apabila kita ingin menambah baik atau mempertingkatkan kefungsian sesuatu objek, tetapi tidak mahu mewarisi kelas dan mencipta subkelas, kita boleh mempertimbangkan untuk menggunakan mod hiasan.

Menggunakan mod hiasan untuk meningkatkan fungsi tertentu objek adalah lebih fleksibel daripada menjana subkelas dan kemudian meningkatkannya.

2. Cara melaksanakan

1) Komponen abstrak: Tentukan kelas abstrak yang mentakrifkan kaedah yang "penghias" perlu "dihias"

2 ) Konkrit komponen: subkelas komponen abstrak. Menjadi "kelas berhias"

3) Komponen hiasan: Ia juga merupakan subkelas komponen abstrak. Kelas ini memegang rujukan kepada "penghias" dan digunakan untuk memanggil kaedah penghias. Ia boleh menjadi kelas abstrak atau kelas bukan abstrak.

4) Kelas hiasan konkrit: Ia merupakan subkelas komponen hiasan, dipanggil "penghias"

3 Pelaksanaan kod

1) Komponen abstrak

/**
 * 抽象组件,定义了被装饰类需要装饰的方法
 */
public abstract class ICake {
    /**
     * 需要装饰的方法
     * @return
     */
    public abstract int getPrice();
}
Salin selepas log masuk

2) Orang yang dihias

/**
 * 被装饰者,是抽象组件的一个子类,定义需要被装饰的方法
 */
public class Cake extends ICake {
    /**
     * 被装饰类中,装饰方法的基本实现
     * @return
     */
    @Override
    public int getPrice() {
        System.out.println("getPrice");
       return 100;
    }
}
Salin selepas log masuk

3) Kelas hiasan

/**
 * 装饰类,也是抽象组件的一个子类。
 * 可以是抽象类,也可以是非抽象类。
 */
public abstract class CakeDecorator extends ICake {
    /**
     * 被装饰类的引用,需要在装饰类中,调用到被装饰类的方法。
     */
    ICake cake;
    public CakeDecorator(ICake cake){
        this.cake = cake;
    }
}
Salin selepas log masuk

4) Hiasan khusus

/**
 * 具体装饰类
 */
public class BlueBerryCake extends CakeDecorator {
    public BlueBerryCake(ICake cake) {
        super(cake);
    }
    /**
     * 被装饰的方法
     * 在调用到被装饰类的基础方法后,还要调用装饰类要增强的方法
     * @return
     */
    @Override
    public float getPrice(){
        return cake.getPrice()+elsePrice();
    }
    /**
     * 增强的方法
     * @return
     */
    private float elsePrice(){
        System.out.println("else getPrice");
        return 50;
    }
}
Salin selepas log masuk

5) Kelas ujian

public class TestDecorator {
    public static void main(String args[]){
        ICake cake = new Cake();
        CakeDecorator decorater = new BlueBerryCake(cake);
        float price = decorater.getPrice();
        System.out.println(price);
    }
}
Salin selepas log masuk

4. Pengembangan

1) Peningkatan kaedah tertentu juga boleh dicapai dengan menggunakan warisan subkelas. Berbanding dengan melaksanakan melalui mod hiasan, apakah kelebihan mod hiasan?

Penghias dan penghias digandingkan secara longgar. Kelas hiasan hanya bergantung pada komponen abstrak Kelas hiasan hanya perlu mengetahui bahawa kelas yang dihias adalah subkelas komponen abstrak, tanpa mengetahui subkelas itu.

Mod hiasan memenuhi "prinsip buka-tutup", dan anda boleh menambah kelas hiasan untuk komponen tanpa mengubah suai komponen tertentu.

5. JavaIo dan mod hiasan

Banyak kelas dalam pakej java.IO menggunakan mod hiasan.

Pembaca

Pembaca Fail

Pembaca Bufferd

Atas ialah kandungan terperinci Apakah prinsip dan kaedah pelaksanaan corak hiasan dalam corak reka bentuk Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan