Wednesday, October 6, 2010

Java සමග Software Design Patterns (2 කොටස | Adapter Pattern)

Adapter නම් design pattern එක structural ආකාරයේ pattern එකකි. ලියන ලද කිසියම් program code එකක් දැනට පවතින වෙනත් නොගැලපෙන(incompatible) code-base එකකට(උදා: google maps API, twitter API) සම්බන්ද කිරීමේදී මෙම design pattern එක apply කල හැකිය. මෙහිදී සිදුකරනුයේ විධිමත් ක්‍රමයකට අපේ program එකට පරිභාහිර code-base එක call කිරීමට class structure එකක් සෑදීමයි. සාමාන්‍යයෙන් අප විසින් සකසන මෙම class තුලදී process එකක් නොපවතී ඒ වෙනුවට එම class මගින් සිදුකරනුයේ අදාලා කාර්‍යය සිදුකරගැනීම පිනිස පවතින code-base එක call කිරීමයි.

 අපි දැන් බලමු adapter pattern එක සඳහා අදාල class diagram එක
ඔබට UML පිළිබඳ යම් අවබෝධයක් ඇත්නම් ඉහත class diagram එක මගින් adapter pattern එකෙහි ව්‍යුහය පිලිබඳ මනා වැටහීමක් ලැබෙනු ඇත. ඔබට UML(Unified Modeling Language) පිළිබඳ අවබෝධයක් නොමැතිනම් මෙම tutorial එක භාගත කරගෙන හොඳින් අධ්‍යයනය කරන්න. ඉන්පසු ඔබට ඉතා පහසුවෙන් මෙම UML diagram එක සහ ඉදිරි පාඩම් වලදී ඉදිරිපත් කෙරෙන UML diagrams වටහාගත හැකිවනු ඇත.



මෙය තවදුරටත් වටහාගැනීම පිනිස මෙම pattern එක ජාවා තුල implement කරන ආකාරය සලකා බලමු. 
/**     
*class  : AdapterTest  
*Author : Kanishka Dilshan     
*Purpose: Showing how to implement Adapter design pattern
*Blog   : http://javaxclass.blogspot.com     
*/ 


interface Adapter {
 void operation();
}

class ConcreteAdapter implements Adapter {
 private Adaptee adaptee ;
 
 public ConcreteAdapter(){
  adaptee=new Adaptee();
 }
 
 public void operation(){
  adaptee.specialOperation();
 }
}

class Adaptee {
 //this is the external codebase
 void specialOperation(){
  System.out.println("Special operation was launched!");
 }
}

//test class
public class AdapterTest{
 public static void main(String args[]){
  ConcreteAdapter ca=new ConcreteAdapter();
  ca.operation();
 }
}
මෙම pattern එක වඩාත් හොඳින් තහවුරු කරගැනීම සඳහා ගැටලුවක් සාකච්ඡා කරමු. මෙම ගැටලුව උපුටාගත්තේ ශ්‍රීලංකා තොරතුරු තාක්ෂණ ආයතයනයේ software engineering II සඳහා ලබාදුන් tutorial එකකිනි.

ගැටලුව:
You have developed a set of classes that draws graphs. 

Here the base class is the Chart Class.  You need to develop a PieChart class.  There is an existing PieChart class called PieChartGraph (See below).  You want to connect your code base to this new Class.  Briefly describe how an appropriate design pattern can be used for this purpose.
පිලිතුර:

abstract class Chart {
 abstract protected void display();
 abstract protected void refresh();
 abstract protected void addData();
}

class XYScatter extends Chart {
 public void display(){
  System.out.println("Displaying XYScatter..");
 }
 
 public void refresh(){
  System.out.println("Refreshing XYScatter..");
 }
 
 public void addData(){
  System.out.println("Adding data to the XYScatter..");
 }
}

class LineGraph extends Chart {
 public void display(){
  System.out.println("Displaying LineGraph..");
 }
 
 public void refresh(){
  System.out.println("Refreshing LineGraph..");
 }
 
 public void addData(){
  System.out.println("Adding data to the LineGraph..");
 }
}

class BarGraph extends Chart {
 public void display(){
  System.out.println("Displaying BarGraph..");
 }
 
 public void refresh(){
  System.out.println("Refreshing BarGraph..");
 }
 
 public void addData(){
  System.out.println("Adding data to the BarGraph..");
 }
}

class PieChart extends Chart {
 
 private PieChartGraph pcg;
 
 public PieChart(){
  pcg=new PieChartGraph();
 }

 public void display(){
  System.out.println("Displaying PieChart..");
  pcg.show();
 }
 
 public void refresh(){
  System.out.println("Refreshing PieChart..");
 }
 
 public void addData(){
  System.out.println("Adding data to the PieChart..");
 }
}

class PieChartGraph{

 public void dataseriesX(){
  
 } 
 
 public void dataseriesY(){
  
 }
 
 public void show(){
  System.out.println("Showing PieChartGraph..");
 }
 
 public void redraw(){
  System.out.println("Refreshing PieChartGraph..");
 }
}

public class Answer {
 public static void main(String args[]){
  PieChart pc=new PieChart();
  pc.display();
 }
}

1 comments: