www.fatihkabakci.com

Personal Website and Computer Science TUR EN

PROTOTYPE DESIGN PATTERN

Last update: 10/7/2014 10:34:00 PM

Yazan:Fatih KABAKCI

Gang Of Four'un Creational(Yaradılış) patternlerinden biri olan Prototype tasarım paterni, büyük veri hacmine sahip nesneleri new operatörü kullanmaksızın, 'klonlama' yöntemi ile oluşturan bir tasarım desenidir. Bellekte sahip olduğu veri miktarı büyük, maliyetli ve zaman alıcı nesnelerin oluşturulması için kullanılan Prototype, bir abstract sınıf veya interface'den oluşturulabilmektedir. Prototype tasarım desenini uygulamak için aşağıda belirtilen iki kuralı uygulamak gerekir.

  1. Nesne kopyalamak(klonlamak)
  2. Klonlanan nesnenin setter metotlarını çağırmak.
Yukarıda belirtilen iki ifade uygulandığı takdirde Prototype Design Pattern gerçeklenmiş olacaktır. Şimdi Prototype tasarım desenini bir örnek uygulama ile inceleyelim. Örnek Java Programlama Dilinde ifade edilecektir.

Aşağıda farklı veritabanı teknolojilerinin süper sınıfını oluşturan, abstract Prototype prototip sınıfın ve bu sınıftan türeyen SqlServer, Oracle ve DB2 alt sınıflarının UML diyagramı gösterilmektedir. DatabasePrototype adı verilen bu prototip sınıfı, Object.clone() metodunun bire bir kopya nesnesi için Java Sanal Makinesi(Java Virtual Machine - JVM)'ye bildiren ve java marker interface olan java.lang.Cloneable arabirimini implemente etmektedir. Böylelikle bu sınıftan türeyen tüm alt sınıf nesneleri bu kopya metottan üretilebilecektir.

Yukarıda modellenen Prototype sınıfında, veritabanı adı, şirketi ve hangi port üzerinde çalışacağı bilgileri yer almaktadır. Bu verilerin getter()/setter() metotları dışında tanımlanan clone() metodu ise, Java Object sınıfı tarafından tanımlanan üst sınıf metodunu çağırır. Bu sayede Prototype tasarım deseninin ilk hamlesi gerçekleştirilmiş olur.

Yukarıdaki UML tasarımının Java Programlama Dili ifadesi aşağıda verilmektedir.

DatabasePrototype Sınıfı

package Prototype;

/**
 * 
 * @author www.fatihkabakci.com
 * @summary The class Prototype
 */
public abstract class DatabasePrototype implements Cloneable {

   private String corporate;
   private String name;
   private int port;
   
   public String getCorporate() {
      return corporate;
   }
   public void setCorporate(String corporate) {
      this.corporate = corporate;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getPort() {
      return port;
   }
   public void setPort(int port) {
      this.port = port;
   }
   public Object clone() throws CloneNotSupportedException {
      return super.clone();
   }
   public String toString() {
      return "[Corporate=" + getCorporate() + ",Name=" + getName() + ",Port=" + getPort() + "]";
   }
}

SqlServer Sınıfı

package Prototype;

/**
 * 
 * @author www.fatihkabakci.com
 * @summary The database class SqlServer
 */

public class SqlServer extends DatabasePrototype {

   public SqlServer() {
      setCorporate("Microsoft");
      setName("Sql Server");
      setPort(1433);
   }
}

Oracle Sınıfı

package Prototype;

/**
 * 
 * @author www.fatihkabakci.com
 * @summary The database class Oracle
 */
public class Oracle extends DatabasePrototype {

   public Oracle() {
      setCorporate("Oracle");
      setName("Oracle");
      setPort(1521);
   }
}

DB2 Sınıfı

package Prototype;

/**
 * 
 * @author www.fatihkabakci.com
 * @summary The database class DB2
 */

public class DB2 extends DatabasePrototype {

   public DB2() {
      setCorporate("IBM");
      setName("DB2");
      setPort(1233);
   }
}
Yukarıda tasarlanan veritabanı sınıfları aşağıda verilen Test sınıfı içerisinde kullanımı verilmektedir. Test sınıfında ilk olarak bir sql nesnesi klasik olarak oluşturulmaktadır. Akabinde ise bu nesnenin bir kopyası olan oracle nesnesi clone() metodu yardımıyla kopyası oluşturulmaktadır. Kopya nesne artık yeni bir nesnedir ve sql'den farklıdır. Bu da nesnelerin hash kodlarının farklı olmasından anlaşılabilir. Klonlanan oracle nesnesi, daha sonra setter() metotları ile özellikleri verilerek nihai varlığına ulaşmış olur.

Aşağıda Test sınıfıda verilmektedir.

Test Sınıfı

package Prototype;

/**
 * @author www.fatihkabakci.com
 * @summary The using of Prototype desing pattern
 */

public class Test {

   public static void main(String[] args) {

      DatabasePrototype sql = new SqlServer();
      System.out.println(sql.toString());
      System.out.println(sql.hashCode());

      try {
         DatabasePrototype oracle = (DatabasePrototype) sql.clone();
         oracle.setCorporate("Oracle");
         oracle.setName("Oracle");
         oracle.setPort(1521);
         System.out.println(oracle.toString());
         System.out.println(oracle.hashCode());
      }
      catch (CloneNotSupportedException e) {
         e.printStackTrace();
      }
   }
}
Sonuç olarak Prototype tasarım deseni, new ile create edilmesi zahmetli nesnelerin oluşturulması için tasarlanan bir desendir. Ayrıca kullanıcı alt sınıfların nasıl kullanılması gerektiğini bilmiyorsa, yine bu tasarım desenini kullanabilmektedir.
There has been no comment yet

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Spring Boot, Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.