JavaRush /Блоги Java /Random-TG /Намунаи тарроҳии ороишӣ бо мисолҳо
Sbv239
Сатҳи
Санкт-Петербург

Намунаи тарроҳии ороишӣ бо мисолҳо

Дар гурӯҳ нашр шудааст
Намунаи тарроҳии ороишдиҳанда ба мо имкон медиҳад, ки ба an object бе таъсир ба рафтори an objectҳои як синф ба таври динамикӣ функсияҳо илова кунем. Ин каме печида садо медиҳад, аммо вақте ки шумо codeро мебинед, ҳама чиз равшантар мешавад. Хусусиятҳо - Ороишгар ба шумо имкон медиҳад, ки ба an objectи мавҷуда бе тағир додани сохтори он функсия илова кунед, яъне синфи аслӣ тағир намеёбад - Намунаи тарроҳии ороишгар як намунаи сохторӣ мебошад, ки барои синфи мавҷуда парпечро таъмин мекунад - Синфҳои ороишдиҳанда офарида шудаанд, ки синфи аслиро печонед ва функсияҳои иловагиро ҳангоми нигоҳ доштани имзоҳои усули синфи аслӣ таъмин кунед - Намунаи тарроҳии ороишгар аксар вақт барои риоя кардани принсипи масъулияти ягонаи SOLID истифода мешавад, зеро мо синфи аслиро бо ӯҳдадориҳои иловагӣ бор намекунем, балки онҳоро тақсим мекунем ба синфҳои ороишгарон - Ороишгар аз ҷиҳати сохтор тақрибан ба занҷири намунаи масъулият шабоҳат дорад (занҷири масъулият) Нуқтаҳои асосии зерин бояд ба назар гирифта шаванд - Ороишгар барои тағир додани рафтори an object дар вақти корӣ муфид аст. Ин codeро нигоҳ доштан ва васеъ кардан осон аст. - Камбудии ин намуна дар он аст, ки шумораи зиёди an objectҳои ороишгари як навъ истифода мешаванд - Намунаи ороишдиҳанда аксар вақт дар синфҳои Java IO (FileReader, BufferedReader ва ғайра) истифода мешавад . татбиқи ин интерфейс - Эҷоди ороишгари абстрактӣ бо татбиқи ин интерфейс - Биёед як ороишгари мушаххасеро созем, ки аз ороишгари абстрактӣ мерос мегирад - Барои "ор" кардани татбиқи мушаххаси интерфейс аз ороишгари мушаххас истифода баред Амалиёт : Мо интерфейси Shape ва синфҳои мушаххасро эҷод мекунем. ки ин интерфейсро амалӣ мекунанд. Минбаъд, мо синфи абстрактии ороишгари ShapeDecorator-ро эҷод мекунем, ки интерфейси Shape-ро амалӣ мекунад ва an objectи Shape ҳамчун майдони синф дорад. Намунаи тарроҳии ороишӣ бо мисолҳо - 1 - Shape номи интерфейс аст - Синфҳои Rectangle, Triangle ва Circle синфҳои мушаххасе хоҳанд буд, ки интерфейси Shape -ро амалӣ мекунанд - ShapeDecorator синфи ороишгари абстрактӣ мебошад, ки ҳамон интерфейси Shape -ро амалӣ мекунад - RedShapeDecorator синфи мушаххасест, ки ShapeDecorator -ро амалӣ мекунад - Намоиш аст синфи намоишӣ, ки дар он мо RedShapeDecorator -ро барои ороиши an objectҳои Shape истифода хоҳем кард Қадами 1 : интерфейси Shape -ро эҷод кунед
public interface Shape {
    void draw();
}
Қадами 2 : Биёед якчанд амалисозии ин интерфейсро эҷод кунем. Дар мисоли дар поён овардашуда танҳо доира хоҳад буд, аммо дар асл мо боз як ҷуфти дигар месозем: росткунҷа ва секунҷа.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
Қадами 3 : Декоратори абстрактӣ эҷод кунед, ки интерфейси Shape -ро амалӣ мекунад
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 : як синфи ороишгари мушаххас эҷод кунед, ки аз синфи абстрактӣ мерос мегирад
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 : Барои ранг кардани an objectҳои мо RedShapeDecorator-ро истифода баред
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 : ба консол нигаред ва шодӣ кунед
Обычный круг:
Я круг!

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

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

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Намунаи тарҳрезии ороишгарро ҳамчун намуна таҳлил карда, мо метавонем ба хулосае ояд, ки истифодаи он дар ҳолатҳои зерин асоснок аст: - Вақте ки мо мехоҳем рафтор ё ҳолати an objectро илова кунем, такмил диҳем ё эҳтимолан хориҷ кунем - Вақте ки мо танҳо мехоҳем функсияро тағир диҳем. аз як an objectи мушаххаси синф ва боқимондаро тағир надиҳед Ташаккур! Анбор бо файлҳои лоиҳа Дар асоси мақолаи сайти geeksforgeeks.org Блоги ман барои навгониҳои Java Dev
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION