JavaRush /Blog Java /Random-MS /Corak reka bentuk penghias dengan contoh
Sbv239
Tahap
Санкт-Петербург

Corak reka bentuk penghias dengan contoh

Diterbitkan dalam kumpulan
Corak reka bentuk penghias membolehkan kami menambah kefungsian secara dinamik pada objek tanpa menjejaskan kelakuan objek kelas yang sama. Kedengarannya agak mengelirukan, tetapi sebaik sahaja anda melihat kod semuanya akan menjadi lebih jelas. Ciri - Penghias membenarkan anda menambah fungsi pada objek sedia ada tanpa mengubah strukturnya, iaitu kelas asal tidak berubah - Corak reka bentuk penghias ialah corak struktur yang menyediakan pembungkus untuk kelas sedia ada - Kelas penghias dicipta yang balut kelas asal dan sediakan fungsi tambahan sambil mengekalkan tandatangan kaedah kelas asal utuh - Corak reka bentuk penghias paling kerap digunakan untuk mengikut prinsip tanggungjawab tunggal daripada SOLID, kerana kami tidak memuatkan kelas asal dengan tanggungjawab tambahan, tetapi membahagikannya ke dalam kelas penghias - Penghias secara strukturnya hampir serupa dengan corak rantaian tanggungjawab (rantai tanggungjawab) Perkara-perkara penting berikut mesti diambil kira - Penghias berguna kerana dapat mengubah suai tingkah laku objek semasa runtime. Kod ini mudah diselenggara dan dilanjutkan. - Kelemahan corak ini ialah sejumlah besar objek penghias daripada jenis yang sama digunakan - Corak penghias sering digunakan dalam kelas Java IO (FileReader, BufferedReader, dll.) Apa yang akan kami lakukan - Cipta antara muka - Cipta konkrit pelaksanaan antara muka ini - Buat penghias abstrak, melaksanakan antara muka ini - Mari buat penghias konkrit yang mewarisi daripada penghias abstrak - Gunakan penghias konkrit untuk "menghias" pelaksanaan konkrit antara muka Pelaksanaan : Kami akan mencipta antara muka Bentuk dan kelas konkrit yang melaksanakan antara muka ini. Seterusnya, kami akan mencipta kelas penghias abstrak, ShapeDecorator, yang melaksanakan antara muka Shape dan mempunyai objek Shape sebagai medan kelas. Corak reka bentuk penghias dengan contoh - 1 - Shape ialah nama antara muka - Kelas Rectangle, Triangle dan Circle akan menjadi kelas konkrit yang melaksanakan antara muka Shape - ShapeDecorator ialah kelas penghias abstrak yang melaksanakan antara muka Shape yang sama - RedShapeDecorator ialah kelas konkrit yang melaksanakan ShapeDecorator - Demo ialah kelas demo di mana kami akan menggunakan RedShapeDecorator untuk menghias objek Shape Langkah 1 : cipta antara muka Shape
public interface Shape {
    void draw();
}
Langkah 2 : Mari buat beberapa pelaksanaan antara muka ini. Dalam contoh di bawah hanya akan ada bulatan, tetapi sebenarnya kita akan mencipta beberapa lagi: segi empat tepat dan segi tiga.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
Langkah 3 : Buat penghias abstrak yang melaksanakan antara muka Bentuk
public abstract class ShapeDecorator implements Shape {

    protected Shape decoratedShape;

    //Конструктор, принимающий an object Shape
    public ShapeDecorator(Shape decoratedShape) {
        this.decoratedShape = decoratedShape;
    }

    public void draw() {
        decoratedShape.draw();
    }
}
Langkah 4 : cipta kelas penghias konkrit yang mewarisi daripada kelas abstrak
public class RedShapeDecorator extends ShapeDecorator{

    public RedShapeDecorator(Shape decoratedShape) {
        super(decoratedShape);
    }

    @Override
    public void draw() {
        decoratedShape.draw();
        setRedBorder(decoratedShape);
    }

    private void setRedBorder(Shape decoratedShape) {
        System.out.println("Сообщение от RedShapeDecorator. Цвет границы: красный");
    }
}
Langkah 5 : Gunakan RedShapeDecorator untuk Mewarnai Objek Kami
public class Demo {
    public static void main(String[] args)
    {
        Shape circle = new Circle();
        Shape redCircle= new RedShapeDecorator(new Circle());
        Shape redRectangle= new RedShapeDecorator(new Rectangle());
        Shape redTriangle = new RedShapeDecorator(new Triangle());

        System.out.println("\nОбычный круг:");
        circle.draw();

        System.out.println("\nКруг с красной границей:");
        redCircle.draw();

        System.out.println("\nПрямоугольник с красной границей:");
        redRectangle.draw();

        System.out.println("\nТреугольник с красной границей:");
        redTriangle.draw();
    }
}
Langkah 6 : lihat konsol dan bergembiralah
Обычный круг:
Я круг!

Круг с красной границей:
Я круг!
Сообщение от RedShapeDecorator. Цвет границы: красный

Прямоугольник с красной границей:
Я прямоугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Setelah meneliti corak reka bentuk penghias sebagai contoh, kita boleh membuat kesimpulan bahawa penggunaannya adalah wajar dalam kes berikut: - Apabila kita ingin menambah, menambah baik atau mungkin mengalih keluar tingkah laku atau keadaan objek - Apabila kita hanya mahu menukar fungsi daripada satu objek tertentu kelas dan biarkan selebihnya tiada perubahan Terima kasih! Repositori dengan fail projek Berdasarkan artikel dari tapak geeksforgeeks.org Blog saya untuk Java Dev pemula
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION