JavaRush /Java блогы /Random-KK /Мысалдары бар декоратор дизайны үлгісі
Sbv239
Деңгей
Санкт-Петербург

Мысалдары бар декоратор дизайны үлгісі

Топта жарияланған
Декоратор дизайны үлгісі бір сыныптағы нысандардың әрекетіне әсер етпестен an objectіге функционалдылықты динамикалық түрде қосуға мүмкіндік береді. Бұл аздап түсініксіз естіледі, бірақ codeты көргенде бәрі түсінікті болады. Мүмкіндіктер - Декоратор бар нысанға оның құрылымын өзгертпестен функционалдылықты қосуға мүмкіндік береді, яғни бастапқы класс өзгермейді - Декоратор дизайн үлгісі - бар класс үшін қаптаманы қамтамасыз ететін құрылымдық үлгі - Декоратор кластары жасалады бастапқы классты орап, бастапқы сыныптың әдіс белгілерін сақтай отырып, қосымша функционалдылықты қамтамасыз етіңіз - Декоратор дизайны үлгісі көбінесе SOLID бір жауапкершілік принципін ұстану үшін пайдаланылады, өйткені біз бастапқы сыныпты қосымша жауапкершіліктермен жүктемейміз, бірақ оларды бөлеміз декоратор сыныптарына - Декоратор құрылымдық жағынан жауапкершілік үлгісіне ұқсас дерлік (жауапкершілік тізбегі) Келесі негізгі тармақтарды ескеру қажет - Декоратор орындау уақытында нысанның әрекетін өзгерту мүмкіндігіне пайдалы. Бұл codeты сақтау және кеңейту оңай. - Бұл үлгінің кемшілігі бір типті декоратор an objectілерінің көп саны пайдаланылады - Декоратор үлгісі Java IO кластарында жиі қолданылады (FileReader, BufferedReader және т.б.) Біз не істейміз - Интерфейс жасаңыз - Бетонды жасаңыз осы интерфейсті іске асыру - Осы интерфейсті жүзеге асыра отырып, дерексіз декораторды жасаңыз - Абстрактілі декоратордан мұра болатын нақты декораторды жасайық - Интерфейстің нақты іске асырылуын «әшекейлеу» үшін бетон декораторды пайдаланыңыз Орындалу : Біз Shape интерфейсін және нақты класстарды жасаймыз осы интерфейсті жүзеге асыратын. Әрі қарай Shape интерфейсін жүзеге асыратын және класс өрісі ретінде Shape нысаны бар ShapeDecorator абстрактілі декоратор класын жасаймыз. Мысалдары бар декоратор дизайны үлгісі - 1 - Shape - интерфейстің атауы - Rectangle, Triangle және Circle кластары Shape интерфейсін жүзеге асыратын нақты сыныптар болады - ShapeDecorator - бірдей Shape интерфейсін жүзеге асыратын абстрактілі декоратор класы - RedShapeDecorator - ShapeDecorator іске асыратын нақты класс - Демо Shape нысандарын безендіру үшін RedShapeDecorator қолданбасын қолданатын демо-сынып 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-қадам : Біздің нысандарды бояу үшін 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