بخش های اصلی

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

Design Pattern - الگوی Null Object

در الگوی Null Object یک شیءِ null جایگزینِ بررسی نمونه شیءِ Null میشه، بجای این که از روشی استفاده کنیم که در آن اگه مقدار null بود، شیءِ Null رابطه ای که در آن کاری انجام نمیشه را برگردانه. چنین شیءِ Nullای می تواند به هنگام موجود نبودن داده برای ارائه ی رفتار پیش فرض نیز به کار بره.

در الگوی Null Object این کلاس ها را ایجاد می کنیم: کلاس abstractای که عملکردهای مختلفی را برای انجام شدن تعیین می کنه و کلاس های concreteای که این کلاس را گسترش می دن و یک کلاس null object که پیاده سازی ِ حالتی که در آن کاری انجام نمی شه را انجام میده و بصورت یکپارچه زمانی که نیاز به بررسی مقدارِ null داریم به کار میره.

پیاده سازی

در این بخش یک کلاس انتزاعی (abstract) به نام AbstractCustomer ایجاد می کنیم که عملکردها را تعریف می کنه. کلاس customer و کلاس های concreteای که کلاس AbstractCustomer را گسترش میدن را هم ایجاد می کنیم. یک کلاسِ factory به نام CustomerFactory نیز برای برگرداندنِ شی ء های RealCustomer یا NullCustomer بر اساس نام customerای که به آن پاس داده میشه، ایجاد می کنیم.

NullPatternDemo، در کلاس انتزاعی مان، از CustomerFactory برای نشان دادن کاربرد الگوی Null Object استفاده می کنیم.

null pattern uml diagram

مرحله ی 1

ایجاد یک کلاس انتزاعی (abstract).

AbstractCustomer.java

public abstract class AbstractCustomer {
   protected String name;
   public abstract boolean isNil();
   public abstract String getName();
}

مرحله ی 2

ایجاد کلاس های concreteای که کلاس های بالا را توسعه میدن.

RealCustomer.java

public class RealCustomer extends AbstractCustomer {

   public RealCustomer(String name) {
      this.name = name;		
   }
   
   @Override
   public String getName() {
      return name;
   }
   
   @Override
   public boolean isNil() {
      return false;
   }
}

NullCustomer.java

public class NullCustomer extends AbstractCustomer {

   @Override
   public String getName() {
      return "Not Available in Customer Database";
   }

   @Override
   public boolean isNil() {
      return true;
   }
}

مرحله ی 3

ایجاد کلاسِ CustomerFactory.

CustomerFactory.java

public class CustomerFactory {
	
   public static final String[] names = {"Rob", "Joe", "Julie"};

   public static AbstractCustomer getCustomer(String name){
   
      for (int i = 0; i < names.length; i++) {
         if (names[i].equalsIgnoreCase(name)){
            return new RealCustomer(name);
         }
      }
      return new NullCustomer();
   }
}

مرحله ی 4

استفاده از CustomerFactory برای گرفتن شیء های RealCustomer یا NullCustomer براساس نامِ customerای که به آن پاس داده میشه.

NullPatternDemo.java

public class NullPatternDemo {
   public static void main(String[] args) {

      AbstractCustomer customer1 = CustomerFactory.getCustomer("Rob");
      AbstractCustomer customer2 = CustomerFactory.getCustomer("Bob");
      AbstractCustomer customer3 = CustomerFactory.getCustomer("Julie");
      AbstractCustomer customer4 = CustomerFactory.getCustomer("Laura");

      System.out.println("Customers");
      System.out.println(customer1.getName());
      System.out.println(customer2.getName());
      System.out.println(customer3.getName());
      System.out.println(customer4.getName());
   }
}

مرحله ی 5

بررسی خروجی

Customers
Rob
Not Available in Customer Database
Julie
Not Available in Customer Database
در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

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

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

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

Learn Design Patterns

سرفصل ها

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

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

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

https://telegram.me/softskill_ir

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

خبـرنــامه

Newsletters

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