JavaRush /จาวาบล็อก /Random-TH /รูปแบบการออกแบบมัณฑนากรพร้อมตัวอย่าง
Sbv239
ระดับ
Санкт-Петербург

รูปแบบการออกแบบมัณฑนากรพร้อมตัวอย่าง

เผยแพร่ในกลุ่ม
รูปแบบการออกแบบมัณฑนากรช่วยให้เราสามารถเพิ่มฟังก์ชันการทำงานให้กับวัตถุได้แบบไดนามิก โดยไม่ส่งผลกระทบต่อพฤติกรรมของวัตถุในคลาสเดียวกัน อาจฟังดูสับสนเล็กน้อย แต่เมื่อคุณเห็นโค้ดแล้ว ทุกอย่างจะชัดเจนขึ้น คุณสมบัติ - มัณฑนากรช่วยให้คุณสามารถเพิ่มฟังก์ชันการทำงานให้กับวัตถุที่มีอยู่โดยไม่ต้องเปลี่ยนโครงสร้างนั่นคือคลาสดั้งเดิมไม่เปลี่ยนแปลง - รูปแบบการออกแบบมัณฑนากรเป็นรูปแบบโครงสร้างที่ให้ wrapper สำหรับคลาสที่มีอยู่ - คลาสมัณฑนากรถูกสร้างขึ้นที่ ห่อคลาสดั้งเดิมและให้ฟังก์ชันเพิ่มเติมในขณะที่ยังคงรักษาลายเซ็นวิธีการของคลาสดั้งเดิมไว้ครบถ้วน - รูปแบบการออกแบบมัณฑนากรมักใช้เพื่อปฏิบัติตามหลักการความรับผิดชอบเดียวจาก SOLID เนื่องจากเราไม่ได้โหลดคลาสดั้งเดิมที่มีความรับผิดชอบเพิ่มเติม แต่แบ่งพวกมัน ในคลาสมัณฑนากร - มัณฑนากรมีโครงสร้างเกือบจะคล้ายกับห่วงโซ่ของรูปแบบความรับผิดชอบ (สายโซ่ความรับผิดชอบ) ต้องคำนึงถึงประเด็นสำคัญต่อไปนี้ - มัณฑนากรมีประโยชน์สำหรับความสามารถในการปรับเปลี่ยนพฤติกรรมของวัตถุในระหว่างรันไทม์ รหัสนี้ง่ายต่อการบำรุงรักษาและขยาย - ข้อเสียของรูปแบบนี้คือมีการใช้วัตถุมัณฑนากรประเภทเดียวกันจำนวนมาก - รูปแบบมัณฑนากรมักใช้ในคลาส Java IO (FileReader, BufferedReader ฯลฯ ) สิ่งที่เราจะทำ - สร้างอินเทอร์เฟซ - สร้างคอนกรีต การใช้งานอินเทอร์เฟซนี้ - สร้างมัณฑนากรนามธรรมโดยใช้อินเทอร์เฟซนี้ - มาสร้างมัณฑนากรคอนกรีตที่สืบทอดมาจากมัณฑนากรนามธรรม - ใช้มัณฑนากรคอนกรีตเพื่อ "ตกแต่ง" การใช้งานที่เป็นรูปธรรมของอินเทอร์เฟซ การใช้งาน : เราจะสร้างอินเทอร์เฟซ Shape และคลาสที่เป็นรูปธรรม ที่ใช้อินเทอร์เฟซนี้ ต่อไป เราจะสร้างคลาสมัณฑนากรเชิงนามธรรม ShapeDecorator ที่ใช้อินเทอร์เฟซ Shape และมีวัตถุ Shape เป็นฟิลด์คลาส รูปแบบการออกแบบมัณฑนากรพร้อมตัวอย่าง - 1 - Shape คือชื่อของอินเทอร์เฟซ - คลาสสี่เหลี่ยมผืนผ้า สามเหลี่ยม และวงกลมจะเป็นคลาสที่เป็นรูปธรรมที่ใช้อินเทอร์เฟซ Shape - ShapeDecorator เป็นคลาสมัณฑนากรแบบนามธรรมที่ใช้อินเทอร์เฟซ Shape เดียวกัน - RedShapeDecorator เป็นคลาสคอนกรีตที่ใช้ ShapeDecorator - Demo คือ คลาสสาธิตที่เราจะใช้ RedShapeDecorator เพื่อตกแต่งวัตถุรูปร่าง ขั้นตอนที่ 1 : สร้างอินเทอร์เฟซรูปร่าง
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. Цвет границы: красный
จากการตรวจสอบรูปแบบการออกแบบมัณฑนากรเป็นตัวอย่าง เราสามารถสรุปได้ว่าการใช้งานนั้นสมเหตุสมผลในกรณีต่อไปนี้: - เมื่อเราต้องการเพิ่ม ปรับปรุง หรืออาจลบพฤติกรรมหรือสถานะของวัตถุ - เมื่อเราเพียงต้องการเปลี่ยนฟังก์ชันการทำงาน ของวัตถุเฉพาะของคลาสและปล่อยให้ส่วนที่เหลือไม่มีการเปลี่ยนแปลง ขอบคุณ! พื้นที่เก็บข้อมูลพร้อมไฟล์โครงการ อ้างอิงจากบทความจากเว็บไซต์ geeksforgeeks.org บล็อกของฉันสำหรับ Java Dev มือใหม่
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION