وهناك مثال جسر نمط
-
05-07-2019 - |
سؤال
وكان لي قضاء بعض الوقت على هذا الجسر نمط سبيل المثال من ويكيبيديا ، ومع ذلك، ما زلت لا أفهم ما هو هذا النمط جسر تحاول شرح.
interface DrawingAPI { public void drawCircle(double x, double y, double radius); } /** "ConcreteImplementor" 1/2 */ class DrawingAPI1 implements DrawingAPI { public void drawCircle(double x, double y, double radius) { System.out.printf("API1.circle at %f:%f radius %f\n", x, y, radius); } } /** "ConcreteImplementor" 2/2 */ class DrawingAPI2 implements DrawingAPI { public void drawCircle(double x, double y, double radius) { System.out.printf("API2.circle at %f:%f radius %f\n", x, y, radius); } } /** "Abstraction" */ interface Shape { public void draw(); // low-level public void resizeByPercentage(double pct); // high-level } /** "Refined Abstraction" */ class CircleShape implements Shape { private double x, y, radius; private DrawingAPI drawingAPI; public CircleShape(double x, double y, double radius, DrawingAPI drawingAPI) { this.x = x; this.y = y; this.radius = radius; this.drawingAPI = drawingAPI; } // low-level i.e. Implementation specific public void draw() { drawingAPI.drawCircle(x, y, radius); } // high-level i.e. Abstraction specific public void resizeByPercentage(double pct) { radius *= pct; } } /** "Client" */ class Main { public static void main(String[] args) { Shape[] shapes = new Shape[2]; shapes[0] = new CircleShape(1, 2, 3, new DrawingAPI1()); shapes[1] = new CircleShape(5, 7, 11, new DrawingAPI2()); for (Shape shape : shapes) { shape.resizeByPercentage(2.5); shape.draw(); } } }
وفئة فرعية CircleShape منشئ يأخذ 4 وسائط، في منهجه التعادل ()، يتم تمرير 3 سائط الأولى إلى ARG 4TH التي يمكن أن تكون أي فئة فرعية من DrawingAPI. فهل هذا يعني أن استخدام نمط الجسر يمكن أن تزيد من المرونة؟ وهناك المزيد من الأشياء هذا المثال يمكن أن تخبرنا؟
وبفضل !!!!
المحلول
وهناك مثال أكثر واقعية لماذا هذا مفيد وجعله أكثر وضوحا. لنفترض DrawingAPI1 بتغليف برنامج تشغيل الرسومات الخاصة بك، في حين DrawingAPI2 يفعل الشيء نفسه لبرنامج تشغيل الطابعة. ثم DrawingAPI هو API عام لنظام الرسومات الخاصة بك. فإنه يتيح لك رسم CircleShape إلى الشاشة وطباعته على قطعة من الورق باستخدام نفس رمز، لديك فقط لتمرير في تطبيقات DrawingAPI مختلفة. ومع ذلك، إذا كنت تمر DrawingAPI إلى Shape.draw () بدلا من تمريرها إلى منشئ أنه سيكون أكثر مرونة لأن ثم يمكنك استخدام نفس الرسم البياني الكائن الشاشة والطابعة.
نصائح أخرى
وفئة فرعية CircleShape منشئ يأخذ 4 وسائط، في منهجه التعادل ()، يتم تمرير 3 سائط الأولى إلى ARG 4TH التي يمكن أن تكون أي فئة فرعية من DrawingAPI. فهل هذا يعني أن استخدام نمط الجسر يمكن أن تزيد من المرونة؟ وهناك المزيد من الأشياء هذا المثال يمكن أن تخبرنا؟
اقتباس فقرة>وانها ليست فقط من المرونة. نمط جسر يفصل التجريد من تنفيذ وكلاهما يمكن أن تختلف بشكل مختلف م>.
ومنذ CircleShape
يستخدم تكوين لاحتواء DrawingAPI
مع من الميراث، يمكنك استبدال API DrawingAPI
مع أي واحد من تطبيقات متعددة من DrawingAPI
وShape
وCircleShape
يمكن أن تتغير بشكل مستقل دون الاعتماد على DrawingAPI
.
ويمكنك العثور على مزيد من التفاصيل حول نمط جسر في أدناه آخر SE، وهو ما يفسر مثلا آخر: