سؤال

وكان لي قضاء بعض الوقت على هذا الجسر نمط سبيل المثال من ويكيبيديا ، ومع ذلك، ما زلت لا أفهم ما هو هذا النمط جسر تحاول شرح.

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، وهو ما يفسر مثلا آخر:

هل يفصل في نمط جسر فكرة مجردة من التنفيذ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top