Академический Документы
Профессиональный Документы
Культура Документы
او ﻻ ﻣن اﻻﻓﺿل اﻻﺷﺎرة اﻟﻰ ﻣﺗﻰ ﺗﺣﺗﺎج اﻟﻰ اﺳﺗﻌﻣﺎﻟﮫ Factory design patternﻛﻣﺎ اﻟﻌﺎدة ﺳﻧﻘوم ﺑﺗﻌرﯾف
Define an interface for creating an object, but let subclasses decide which class to instantiate. The
Factory method lets a class defer instantiation it uses to subclasses . Gang of Four
) (abstract class ,interfaceﻋﻧدﻣﺎ ﯾﻛون ﻟدﯾﻧﺎ ﻛﻼس Factory DPﺑﻼ ﺑﻼ ﺑﻼ دﻋك ﻣن ھذا اﻟﺗﻌرﯾف و دﻋﻧﻲ اﺧﺑرك اوﻻ ﻣﺗﻰ ﻧﺣﺗﺎﺟﮫ .ﻧﺳﺗﻌﻣل
ﻋﻧدھﺎ ﻓﻘط ﻧﻘوم ﺑﺎﻧﺷﺎء ﻛﻼس ﯾﺳﻣﻰ String .ﻣﺛل inputﻣن ﺧﻼل subClassesﺗرث ﻣﻧﮫ ﻋدة ﻛﻼﺳﺎت اﺧرى و ﻧرﻏب ﻓﻲ اﻟوﺻول اﻟﻰ اﺣد ھذه
.اﻟذي ﺗم ﺗﻣرﯾره ﻟﮫ inputﯾﻘوم ﺑﺎﻧﺷﺎء ﻛﻼس ﺑﻧﺎءا ﻋﻠﻰ Factory
.اﻟذي ﻟﯾس اﺻﻼ ﻧﻣط ﺗﺻﻣﯾم Simple Factoryو ﯾﺧﺗﻠف ﻋن Factory Method Design Patternھذا اﻟﻧﻣط ﯾﺳﻣﻰ اﯾﺿﺎ
String .ﺳﻧﻘوم ﺑﺎﻧﺷﺎء ﺑرﻧﺎﻣﺞ ﯾﻘوم ﺑﺎﻧﺷﺎء ﺷﻛل ھﻧدﺳﻲ )ﻣﺛﻠث داﺋرة ﻣرﺑﻊ( و ذﻟك ﺑﻧﺎء ﻋﻠﻰ
ﻣرﺣﻠﺔ اﻧﺷﺎء اﻟﻛﻼس اﻻب
Interfaceاو ﻛﻼس ﻋﺎدي ،ﻟﻛن ﻓﻲ ھذه اﻟﺣﺎﻟﺔ ﺳﻧﺳﺗﻌﻣل Interfaceاو Abstract Classو ﯾﻣﻛن ان ﯾﻛون Super Classاﻟﻛﻼس اﻻب ھو
.و ھﻲ اﻟﺗﻲ ﺳﺗﺣﺗوى ﻋﻠﻰ اﻛواد رﺳم اﻟﺷﻛل اﻟﮭﻧدﺳﻲ drawﺑﮫ داﻟﺔ Shapeﺑﺎﺳم
ﻟﻛن ﯾﻣﻛﻧك ﺗﻐﯾر ﻣﺣﺗوى اﻟداﻟﺔ ﺑﻣﺎ ﯾﻧﺎﺳب ﺣﺎﻟﺗك Consoleﺑﺎﻟطﺑﻊ ﻟن ﻧﻘوم ﺑرﺳم اﻻﺷﻛﺎل اﻟﮭﻧدﺳﯾﺔ ﻋﻠﻰ
@Override
{ )(public void draw
//
//
;)"ﺛﻢ رﺳﻢ اﻟﻤﺮﺑﻊ ﺑﻨﺠﺎح"(System.out.println
}
}
: /اﻟداﺋرة
// Circle.java java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println(";)"ﺛﻢ رﺳﻢ اﻟﺪاﺋﺮة ﺑﻨﺠﺎح
}
}
اﻟﻣﺛﻠت:
// Triangle.java java
public class Triangle implements Shape {
@Override
public void draw() {
System.out.println(";)"ﺛﻢ رﺳﻢ اﻟﻤﺜﻠﺚ ﺑﻨﺠﺎح
}
}
اﻧﺷﺎءFactory
ھﻧﺎ ﻧﻘوم ﺑﺎﻧﺷﺎء اﻟﻛﻼس اﻟذي ﯾﻘرر اي ﯾﺗم اﻧﺷﺎءه ﺑﻧﺎء ﻋﻠﻰString ﯾﺗم ﺗﻣرﯾره اﻟﯾﮫ
// ShapeFactory.java java
public class ShapeFactory {
//
//
//shapeType
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("Square")){
return new Square();
} else if(shapeType.equalsIgnoreCase("Circle")){
return new Circle();
} else if(shapeType.equalsIgnoreCase("Triangle")){
return new Triangle();
}
return null;
}
}
// Main.java java
public class Main {
//
Shape square = shapeFactory.getShape("Square");
//
//
square.draw(); /
//
;)"Shape circle = shapeFactory.getShape("Circle
circle.draw(); //
triangle.draw(); //
}
}
اﻟﻧﺗﯾﺟﺔ
ﺣﺳﻧﺎ ھذا ﻓﻘط ﻣﺛﺎل ﻣﺑﺳط و اﺣﯾﺎﻧﺎ ﯾﻛون ھذا اﻟﻧﻣط ﻣﻔﯾدا ﻋﻧدﻣﺎ ﻧﻘوم ﺑﺗﻐﯾر factory .ﻣﺑﺎﺷرة دون اﺳﺗﻌﻣﺎل subClassesﻟﻣﺎذا ﻻ ﻧﻘوم ﺑﺎﻟوﺻول اﻟﻰ
و ﻏﯾرھﺎ .و اﻻھم ﻣن ذﻟك ﻗد ﯾﻛون اﺳﺗﻌﻣﺎﻟﮫ ﻏﯾر ﺟﯾد testingو ﻟدﯾﮫ ﻓواﺋد اﺧرى ﺗﺗﻌﻠﻖ ب Main .اﺣد اﻟﻛﻼﺳﺎت ﻓﻼ ﻧﺣﺗﺎج ﻟﺗﻐﯾر اﻟﻛود اﻟﻣوﺟود ﻓﻲ
.ﺑﺎﻟﻣرة ﻟدى ﯾﺟب ان ﺗﻌرف ﻛﯾف ﺗﺳﺗﻌﻣﻠﮫ
/