بخش های اصلی

آموزش الگوهای طراحی

Design Pattern - الگوی Factory

الگوی Factory یکی از پرکاربردترین الگوهای طراحی در java است. از آن جایی که این نوع از الگوی طراحی یکی از بهترین راه های ایجاد شیء را ارائه میده، بعنوان زیرگروهی از الگوهای تکوینی (creational patterns) محسوب میشه.

در الگوی Factory، شیء را بدون درگیر کردن کلاینت با منطقِ خلق، ایجاد میکنیم و با استفاده از رابط مشترک، به شی ء ایجاد شده ی جدید اشاره می کنیم.

پیاده سازی

در این بخش، رابطی به نام Shape ایجاد می کنیم و کلاس های concrete رابطِ Shape را پیاده سازی می کنن. یک کلاس factory، به نام ShapeFactory هم در مرحله ی بعدی ایجاد می کنیم.

FactoryPatternDemo، نسخه ی نمایشی کلاس، از ShapeFactory برای گرفتنِ یک شیءِ Shape استفاده میکنه. این کلاس، برای گرفتن نوعِ شئ ای که احتیاج داره، اطلاعاتِ (دایره (CIRCLE)، مستطیل (RECTANGLE)، مربع (SQUARE)) را به ShapeFactory پاس میده.

factory pattern uml diagram

مرحله ی 1

ایجاد رابط.

Shape.java

public interface Shape {
   void draw();
}

مرحله ی 2

ایجاد کلاس های concreteای که رابطی مشابه را پیاده سازی می کنن.

Rectangle.java

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Rectangle::draw() method.");
   }
}

Squar.java

public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Square::draw() method.");
   }
}

Circle.java

public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Inside Circle::draw() method.");
   }
}

مرحله ی 3

ایجاد یک Factory  برای تولید شیءای از کلاسِ concrete، براساس اطلاعات داده شده.

ShapeFactory.java

public class ShapeFactory {
	
   //use getShape method to get object of type shape 
   public Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }		
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();
         
      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
         
      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }
      
      return null;
   }
}

مرحله ی 4

استفاده از Factory برای گرفتنِ شیء ای از کلاسِ Concrete با پاس دادن اطلاعاتی مانند نوع (type).

FactoryPatternDemo.java

public class FactoryPatternDemo {

   public static void main(String[] args) {
      ShapeFactory shapeFactory = new ShapeFactory();

      //get an object of Circle and call its draw method.
      Shape shape1 = shapeFactory.getShape("CIRCLE");

      //call draw method of Circle
      shape1.draw();

      //get an object of Rectangle and call its draw method.
      Shape shape2 = shapeFactory.getShape("RECTANGLE");

      //call draw method of Rectangle
      shape2.draw();

      //get an object of Square and call its draw method.
      Shape shape3 = shapeFactory.getShape("SQUARE");

      //call draw method of circle
      shape3.draw();
   }
}

مرحله ی 5

بررسی خروجی

Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد