Вы находитесь на странице: 1из 3

‫و ﻣﻧﮫ ﻧﺳﺗﺧرج ﺧﺻﺎﺋﺻﮫ ‪ .

‬او ﻻ ﻣن اﻻﻓﺿل اﻻﺷﺎرة اﻟﻰ ﻣﺗﻰ ﺗﺣﺗﺎج اﻟﻰ اﺳﺗﻌﻣﺎﻟﮫ ‪ Factory design pattern‬ﻛﻣﺎ اﻟﻌﺎدة ﺳﻧﻘوم ﺑﺗﻌرﯾف‬

‫‪ Factory design pattern‬ﺗﻌرﯾف‬

‫‪ Gang of Four‬دﻋوﻧﺎ ﻧرى اﻟﺗﻌرﯾف اﻟرﺳﻣﻲ ﻣن ﻛﺗﺎب‬

‫‪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‬ھذا اﻟﻧﻣط ﯾﺳﻣﻰ اﯾﺿﺎ‬

‫‪ Factory design pattern‬اﻧﺷﺎء‬

‫‪ String .‬ﺳﻧﻘوم ﺑﺎﻧﺷﺎء ﺑرﻧﺎﻣﺞ ﯾﻘوم ﺑﺎﻧﺷﺎء ﺷﻛل ھﻧدﺳﻲ )ﻣﺛﻠث داﺋرة ﻣرﺑﻊ( و ذﻟك ﺑﻧﺎء ﻋﻠﻰ‬
‫ﻣرﺣﻠﺔ اﻧﺷﺎء اﻟﻛﻼس اﻻب‬
‫‪ Interface‬او ﻛﻼس ﻋﺎدي ‪ ،‬ﻟﻛن ﻓﻲ ھذه اﻟﺣﺎﻟﺔ ﺳﻧﺳﺗﻌﻣل ‪ Interface‬او ‪ Abstract Class‬و ﯾﻣﻛن ان ﯾﻛون ‪ Super Class‬اﻟﻛﻼس اﻻب ھو‬
‫‪.‬و ھﻲ اﻟﺗﻲ ﺳﺗﺣﺗوى ﻋﻠﻰ اﻛواد رﺳم اﻟﺷﻛل اﻟﮭﻧدﺳﻲ ‪ draw‬ﺑﮫ داﻟﺔ ‪ Shape‬ﺑﺎﺳم‬

‫ﻟﻛن ﯾﻣﻛﻧك ﺗﻐﯾر ﻣﺣﺗوى اﻟداﻟﺔ ﺑﻣﺎ ﯾﻧﺎﺳب ﺣﺎﻟﺗك ‪ Console‬ﺑﺎﻟطﺑﻊ ﻟن ﻧﻘوم ﺑرﺳم اﻻﺷﻛﺎل اﻟﮭﻧدﺳﯾﺔ ﻋﻠﻰ‬

‫‪// Shape.java‬‬ ‫‪java‬‬


‫{ ‪public interface Shape‬‬
‫;)(‪void draw‬‬
‫}‬

‫ﻟﻧﻘم اﻻن ﺑﺎﻧﺷﺎء اﻻﺑﻧﺎء‬


‫‪ .‬اﻋﻼه و ﺑﻣﺎ اﻧﻧﺎ ﻧرﻏب ﻓﻲ اﻧﺷﺎء ﻣﺛﻠث او داﺋرة او ﻣرﺑﻊ ﺳﻧﻘوم ﺑﺎﻧﺷﺎء ﻛﻼس ﻟﻛل واﺣد ﻣﻧﮭم ‪ Shape‬و ﺳﯾرث ﻣن ‪ SubClass‬اﻟﻛﻼس اﻻﺑن او‬
‫‪ :‬اﻟﻣرﺑﻊ‬

‫‪// Square.java‬‬ ‫‪java‬‬


‫{ ‪public class Square implements Shape‬‬

‫‪@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;
}
}

‫اﻻن ﻟﻧرى طرﯾﻘﺔ ﻋﻣﻠﮫ‬


‫ ﺳﻧﻘوم ﺑﺎﻧﺷﺎء ﻛﺎﺋن ﻣن‬ShapeFactory ‫ و ﺑﮭذا ﯾﻣﻛﻧﻧﺎ اﻟوﺻول اﻟﻰ داﻟﺔ‬getShape ‫ اﻟﺗﻲ ﺗﻘوم ﺑﺎﻧﺷﺎء اﻟﻛﻼس ﺑﻧﺎءا ﻋﻠﻰ‬input .

// Main.java java
public class Main {

public static void main(String[] args) {


ShapeFactory shapeFactory = new ShapeFactory();

//
Shape square = shapeFactory.getShape("Square");

//
//
square.draw(); /
‫‪//‬‬
‫;)"‪Shape circle = shapeFactory.getShape("Circle‬‬

‫‪circle.draw(); //‬‬

‫;)"‪Shape triangle = shapeFactory.getShape("Triangle‬‬

‫‪triangle.draw(); //‬‬
‫}‬
‫}‬

‫‪ Factory design pattern‬ﺗﺟرﺑﺔ‬

‫ھﻛذا ﺳﺗﻛون اﻟﻧﺗﯾﺟﺔ‬

‫اﻟﻧﺗﯾﺟﺔ‬

‫اﻋﻠم ﻣﺎ ﺗﻔﻛر ﻓﯾﮫ‬

‫ﺣﺳﻧﺎ ھذا ﻓﻘط ﻣﺛﺎل ﻣﺑﺳط و اﺣﯾﺎﻧﺎ ﯾﻛون ھذا اﻟﻧﻣط ﻣﻔﯾدا ﻋﻧدﻣﺎ ﻧﻘوم ﺑﺗﻐﯾر ‪ factory .‬ﻣﺑﺎﺷرة دون اﺳﺗﻌﻣﺎل ‪ subClasses‬ﻟﻣﺎذا ﻻ ﻧﻘوم ﺑﺎﻟوﺻول اﻟﻰ‬
‫و ﻏﯾرھﺎ ‪ .‬و اﻻھم ﻣن ذﻟك ﻗد ﯾﻛون اﺳﺗﻌﻣﺎﻟﮫ ﻏﯾر ﺟﯾد ‪ testing‬و ﻟدﯾﮫ ﻓواﺋد اﺧرى ﺗﺗﻌﻠﻖ ب ‪ Main .‬اﺣد اﻟﻛﻼﺳﺎت ﻓﻼ ﻧﺣﺗﺎج ﻟﺗﻐﯾر اﻟﻛود اﻟﻣوﺟود ﻓﻲ‬
‫‪ .‬ﺑﺎﻟﻣرة ﻟدى ﯾﺟب ان ﺗﻌرف ﻛﯾف ﺗﺳﺗﻌﻣﻠﮫ‬

‫‪/‬‬

Вам также может понравиться