JavaRush /Java Blog /Random-TL /Pattern ng disenyo ng dekorador na may mga halimbawa
Sbv239
Antas
Санкт-Петербург

Pattern ng disenyo ng dekorador na may mga halimbawa

Nai-publish sa grupo
Ang pattern ng disenyo ng dekorador ay nagbibigay-daan sa amin na dynamic na magdagdag ng functionality sa isang bagay nang hindi naaapektuhan ang pag-uugali ng mga bagay ng parehong klase. Mukhang medyo nakakalito, ngunit kapag nakita mo ang code ay magiging mas malinaw ang lahat. Mga Tampok - Binibigyang-daan ka ng isang dekorador na magdagdag ng pag-andar sa isang umiiral na bagay nang hindi binabago ang istraktura nito, iyon ay, ang orihinal na klase ay hindi nagbabago - Ang pattern ng disenyo ng dekorador ay isang structural pattern na nagbibigay ng isang wrapper para sa isang umiiral na klase - Ang mga klase ng dekorador ay nilikha na balutin ang orihinal na klase at magbigay ng karagdagang pag-andar habang pinapanatili ang mga lagda ng pamamaraan ng orihinal na klase na buo - Ang pattern ng disenyo ng dekorador ay kadalasang ginagamit upang sundin ang iisang prinsipyo ng responsibilidad mula sa SOLID, dahil hindi namin nilo-load ang orihinal na klase ng mga karagdagang responsibilidad, ngunit hinahati ang mga ito sa mga klase ng dekorador - Ang dekorador ay halos kapareho ng istruktura sa pattern ng chain of responsibility (chain of responsibility) Ang mga sumusunod na pangunahing punto ay dapat isaalang-alang - Ang isang dekorador ay kapaki-pakinabang para sa kakayahang baguhin ang pag-uugali ng isang bagay sa panahon ng runtime. Ang code na ito ay madaling panatilihin at palawigin. - Ang kawalan ng pattern na ito ay ang isang malaking bilang ng mga dekorador na bagay ng parehong uri ay ginagamit - Ang pattern ng dekorador ay kadalasang ginagamit sa mga klase ng Java IO (FileReader, BufferedReader, atbp.) Ano ang aming gagawin - Lumikha ng isang interface - Lumikha ng kongkreto mga pagpapatupad ng interface na ito - Lumikha ng abstract na dekorador, na nagpapatupad ng interface na ito - Gumawa tayo ng isang konkretong dekorador na nagmana mula sa isang abstract na dekorador - Gumamit ng isang konkretong dekorador upang "palamutihan" ang mga konkretong pagpapatupad ng interface Pagpapatupad: Gagawa tayo ng Shape interface at mga kongkretong klase na nagpapatupad ng interface na ito. Susunod, gagawa kami ng abstract decorator class, ShapeDecorator, na nagpapatupad ng Shape interface at mayroong Shape object bilang field ng klase. Pattern ng disenyo ng dekorador na may mga halimbawa - 1 - Ang Shape ay ang pangalan ng interface - Ang Rectangle, Triangle at Circle na mga klase ay magiging mga kongkretong klase na nagpapatupad ng Shape interface - Ang ShapeDecorator ay isang abstract decorator class na nagpapatupad ng parehong Shape interface - RedShapeDecorator ay isang kongkretong klase na nagpapatupad ng ShapeDecorator - Demo ay isang demo class kung saan gagamitin namin ang RedShapeDecorator upang palamutihan ang mga Shape object Hakbang 1 : lumikha ng interface ng Shape
public interface Shape {
    void draw();
}
Hakbang 2 : Gumawa tayo ng ilang pagpapatupad ng interface na ito. Sa halimbawa sa ibaba ay magkakaroon lamang ng isang bilog, ngunit sa katunayan ay lilikha kami ng ilang higit pa: isang parihaba at isang tatsulok.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
Hakbang 3 : Gumawa ng abstract decorator na nagpapatupad ng interface ng 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();
    }
}
Hakbang 4 : lumikha ng isang kongkretong dekorador na klase na nagmana mula sa abstract na klase
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. Цвет границы: красный");
    }
}
Hakbang 5 : Gamitin ang RedShapeDecorator para Kulayan ang Aming mga Bagay
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();
    }
}
Hakbang 6 : tumingin sa console at magalak
Обычный круг:
Я круг!

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

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

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Ang pagkakaroon ng pagsusuri sa pattern ng disenyo ng dekorador bilang isang halimbawa, maaari nating tapusin na ang paggamit nito ay makatwiran sa mga sumusunod na kaso: - Kapag gusto nating magdagdag, pagbutihin o posibleng alisin ang pag-uugali o estado ng isang bagay - Kapag gusto lang nating baguhin ang pag-andar ng isang partikular na bagay ng isang klase at iwanan ang iba na walang pagbabago Salamat! Imbakan na may mga file ng proyekto Batay sa isang artikulo mula sa site na geeksforgeeks.org Ang aking blog para sa isang baguhan na Java Dev
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION