JavaRush /Java blogi /Random-UZ /Misollar bilan dekorativ dizayn namunasi
Sbv239
Daraja
Санкт-Петербург

Misollar bilan dekorativ dizayn namunasi

Guruhda nashr etilgan
Dekorator dizayni namunasi bizga bir xil sinf ob'ektlarining xatti-harakatlariga ta'sir qilmasdan ob'ektga funksionallikni dinamik ravishda qo'shish imkonini beradi. Bu biroz chalkash tuyuladi, lekin kodni ko'rganingizdan so'ng hamma narsa aniqroq bo'ladi. Xususiyatlari - Dekorator mavjud ob'ektning tuzilishini o'zgartirmasdan unga funksionallik qo'shish imkonini beradi, ya'ni asl sinf o'zgarmaydi - Dekorator dizayn namunasi mavjud sinf uchun o'rashni ta'minlovchi strukturaviy naqshdir - Dekorator sinflari yaratiladi. asl sinfni o'rab oling va asl sinfning usul imzolarini saqlab qolgan holda qo'shimcha funksionallikni ta'minlang - Dekorator dizayni namunasi ko'pincha SOLID-dan yagona javobgarlik tamoyiliga amal qilish uchun ishlatiladi, chunki biz asl sinfni qo'shimcha mas'uliyat bilan yuklamaymiz, lekin ularni ajratamiz. dekorativ sinflarga - Dekorator tuzilmaviy jihatdan javobgarlik namunasiga (mas'uliyat zanjiri) deyarli o'xshaydi. Quyidagi asosiy fikrlarni hisobga olish kerak - Dekorator ish vaqtida ob'ektning harakatini o'zgartirishi uchun foydalidir. Ushbu kodni saqlash va kengaytirish oson. - Bu naqshning kamchiligi shundaki, ko'p sonli bir xil turdagi dekorativ ob'ektlar qo'llaniladi - Dekorator naqsh ko'pincha Java IO sinflarida qo'llaniladi (FileReader, BufferedReader va boshqalar) Biz nima qilamiz - Interfeys yaratish - Beton yaratish Ushbu interfeysning amalga oshirilishi - Ushbu interfeysni amalga oshirgan holda mavhum dekorator yarating - Abstrakt dekorativdan meros bo'lgan konkret dekorator yarataylik - Interfeysning aniq amalga oshirilishini "bezatish" uchun beton dekoratordan foydalaning Amalga oshirish : Shakl interfeysi va beton sinflarni yaratamiz. Ushbu interfeysni amalga oshiradigan. Keyinchalik, Shape interfeysini amalga oshiradigan va sinf maydoni sifatida Shape ob'ektiga ega bo'lgan ShapeDecorator mavhum dekorator sinfini yaratamiz. Misollar bilan dekorativ dizayn naqshlari - 1 - Shakl - interfeys nomi - Rectangle, Triangle va Circle sinflari Shape interfeysini amalga oshiradigan konkret sinflar bo'ladi - ShapeDecorator - bir xil Shape interfeysini amalga oshiradigan mavhum dekorator sinfi - RedShapeDecorator - ShapeDecorator-ni amalga oshiradigan konkret sinf - Demo Shakl ob'ektlarini bezash uchun RedShapeDecorator-dan foydalanadigan demo sinf 1-qadam : Shakl interfeysini yarating
public interface Shape {
    void draw();
}
2-qadam : Keling, ushbu interfeysning bir nechta ilovalarini yarataylik. Quyidagi misolda faqat aylana bo'ladi, lekin aslida biz yana ikkitasini yaratamiz: to'rtburchak va uchburchak.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
3-qadam : Shakl interfeysini amalga oshiradigan mavhum dekorator yarating
public abstract class ShapeDecorator implements Shape {

    protected Shape decoratedShape;

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

    public void draw() {
        decoratedShape.draw();
    }
}
4-qadam : mavhum sinfdan meros bo'lgan aniq dekorativ sinf yarating
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. Цвет границы: красный");
    }
}
5-qadam : Ob'ektlarimizni ranglash uchun RedShapeDecorator-dan foydalaning
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();
    }
}
6-qadam : konsolga qarang va xursand bo'ling
Обычный круг:
Я круг!

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

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

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Namuna sifatida dekorativ dizayn naqshini o'rganib chiqib, biz quyidagi hollarda undan foydalanish oqlanadi degan xulosaga kelishimiz mumkin: - Biz ob'ektning xatti-harakatini yoki holatini qo'shishni, yaxshilashni yoki olib tashlashni xohlaganimizda - Biz shunchaki funksionallikni o'zgartirmoqchi bo'lganimizda Sinfning bitta aniq ob'ektiga tegishli va qolganlarini o'zgarishsiz qoldiring Rahmat! Loyiha fayllari ombori geeksforgeeks.org saytidan olingan maqola asosida Java Dev uchun yangi boshlanuvchilar uchun blogim
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION