JavaRush /Java Blog /Random-TK /Mysallar bilen bezeg dizaýn nagşy
Sbv239
Dereje
Санкт-Петербург

Mysallar bilen bezeg dizaýn nagşy

Toparda çap edildi
Bezeg dizaýn nagşy, şol bir synpdaky obýektleriň özüni alyp barşyna täsir etmezden, bir obýekte dinamiki taýdan işlemäge mümkinçilik berýär. Biraz bulaşyk ýaly görünýär, ýöne kody göreniňizden soň hemme zat düşnükli bolar. Aýratynlyklary - Bezegçi, gurluşyny üýtgetmän bar bolan obýekte işlemäge mümkinçilik berýär, ýagny asyl synp üýtgemeýär - Bezeg dizaýn nagşy, bar bolan synp üçin örtük berýän gurluş nagşydyr - Bezeg synplary döredildi Asyl synpy gurşap alyň we asyl synpyň usul gollaryny gorap saklamak bilen goşmaça işlemegi üpjün ediň - Bezeg dizaýn nagşy köplenç SOLID-den ýekeje jogapkärçilik ýörelgesine eýermek üçin ulanylýar, sebäbi asyl synpy goşmaça jogapkärçilikler bilen ýüklemeýäris, ýöne bölýäris bezeg synplaryna - Bezegçi gurluş gurluşy jogapkärçilik zynjyryna (jogapkärçilik zynjyry) diýen ýaly meňzeýär Aşakdaky möhüm nokatlary göz öňünde tutmaly - Bezegçi iş wagty obýektiň özüni alyp barşyny üýtgetmek üçin peýdalydyr. Bu kody saklamak we giňeltmek aňsat. - Bu nagşyň ýetmezçiligi, şol bir görnüşdäki köp sanly bezeg desgalarynyň ulanylmagydyr - Bezeg nagşy köplenç Java IO synplarynda ulanylýar (FileReader, BufferedReader we ş.m.) Näme ederis - Interfeýs dörediň - Beton dörediň bu interfeýsiň durmuşa geçirilmegi - Abstrakt bezegçi dörediň, bu interfeýsi durmuşa geçiriň - Abstrakt bezegçiden miras galan beton bezegçini döredeliň - Interfeýsiň anyk ýerine ýetirilişini "bezemek" üçin beton bezegçini ulanyň Durmuş : Şekil interfeýsini we beton synplary dörederis bu interfeýsi durmuşa geçirýär. Ondan soň, “ShapeDecorator” abstrakt bezeg synpyny dörederis, “Shape” interfeýsini amala aşyrýan we “Shape” obýekti synp meýdançasy hökmünde döreder. Mysallar bilen bezeg dizaýn nagşy - 1 - Şekil interfeýsiň ady - Gönüburçluk, üçburçluk we tegelek synplar “Shape” interfeýsini amala aşyrýan anyk synplar bolar - “ShapeDecorator” şol bir şekil interfeýsini amala aşyrýan abstrakt bezeg synpy - RedShapeDecorator “ShapeDecorator” - Demo. Şekil obýektlerini bezemek üçin RedShapeDecorator ulanjak demo synpymyz 1-nji ädim : Şekil interfeýsini döretmek
public interface Shape {
    void draw();
}
2-nji ädim : Geliň, bu interfeýsiň birnäçe ýerine ýetirilişini döredeliň. Aşakdaky mysalda diňe bir tegelek bolar, ýöne aslynda ýene bir-iki sanysyny dörederis: gönüburçluk we üçburçluk.
public class Circle implements Shape{
    @Override
    public void draw() {
        System.out.println("Я круг!");
    }
}
3-nji ädim : Şekil interfeýsini ýerine ýetirýän abstrakt bezegçi dörediň
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-nji ädim : abstrakt synpdan miras galan beton bezeg synpyny dörediň
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-nji ädim : Obýektlerimizi reňklemek üçin RedShapeDecorator ulanyň
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-njy ädim : konsola serediň we begeniň
Обычный круг:
Я круг!

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

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

Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Bezeg dizaýn nusgasyny mysal hökmünde gözden geçirenimizden soň, ulanylyşynyň aşakdaky ýagdaýlarda dogrydygyny aýdyp bileris: - Bir obýektiň özüni alyp barşyny ýa-da ýagdaýyny goşmak, gowulaşdyrmak ýa-da aýyrmak islänimizde - Diňe işlemegi üýtgetmek islänimizde synpyň belli bir obýektinden, galanlaryny üýtgetmän goýuň Sag boluň! Taslama faýllary bilen ammar geeksforgeeks.org sahypasynyň bir makalasyna esaslanyp, täze başlan Java Dev üçin blogym
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION