Ing wektu iki, sampeyan bisa uga wis nemoni pola desain. Contone, singleton .

Ayo ngelingi pola apa, kenapa dibutuhake, lan pola kreasi apa (singleton minangka conto). Kita uga bakal sinau pola anyar: cara pabrik.

Ing pangembangan piranti lunak, pola desain minangka konstruksi arsitektur sing bisa diulang sing nggambarake solusi kanggo masalah desain ing sawetara konteks sing terus-terusan.

Biasane, pola dudu solusi pungkasan sing bisa langsung diowahi dadi kode. Iku mung solusi model kanggo masalah sing bisa digunakake ing macem-macem kahanan.

Pola kreasi yaiku pola desain sing gegayutan karo proses nggawe obyek. Dheweke bisa nggawe sistem sing ora gumantung saka cara sing digunakake kanggo nggawe, nyusun, lan nampilake obyek.

Cara pabrik minangka pola desain kreasi sing nemtokake antarmuka umum kanggo nggawe obyek ing kelas induk, menehi turunane kemampuan kanggo nggawe obyek kasebut. Ing wektu nggawe, keturunan bisa nemtokake kelas sing bakal digawe.

Masalah apa sing diatasi pola?

Mbayangno yen sampeyan arep nggawe program pangiriman. Kaping pisanan, sampeyan bakal nyewa kurir karo mobil lan nggunakake amobilobyek kanggo makili kendaraan pangiriman ing program. Kurir ngirim paket saka titik A menyang titik B lan liya-liyane. Gampang peasy.

Program iki entuk popularitas. Bisnis sampeyan tuwuh lan sampeyan pengin nggedhekake menyang pasar anyar. Contone, sampeyan bisa uga miwiti ngirim panganan lan pengiriman barang. Ing kasus iki, panganan bisa dikirim dening kurir kanthi mlaku, skuter, lan sepeda, nanging truk dibutuhake kanggo barang.

Saiki sampeyan kudu nglacak sawetara perkara (kapan, kanggo sapa, apa lan pira sing bakal dikirim), kalebu jumlah sing bisa digawa saben kurir. Mode transportasi anyar duwe kecepatan lan kapasitas sing beda. Banjur sampeyan sok dong mirsani sing paling entitas ing program sing banget disambungake menyangmobilkelas. Sampeyan nyadari yen supaya program sampeyan bisa digunakake kanthi cara pangiriman liyane, sampeyan kudu nulis ulang basis kode sing wis ana lan nglakoni maneh saben sampeyan nambahake kendaraan anyar.

Asilé yaiku kode nggegirisi sing diisi pernyataan kondisional sing nindakake tumindak sing beda-beda gumantung saka jinis transportasi.

Solusi

Pola metode pabrik nyaranake nggawe obyek kanthi nelpon metode pabrik khusus tinimbang langsung nggunakake operator anyar . Subkelas saka kelas sing nduweni metode pabrik bisa ngowahi obyek sing digawe saka kendaraan tartamtu. Sepisanan, iki bisa uga ora ana gunane: kita mung mindhah telpon konstruktor saka sak panggonan ing program menyang liyane. Nanging saiki sampeyan bisa ngatasi cara pabrik ing subkelas kanggo ngganti jinis transportasi sing digawe.

Ayo ndeleng diagram kelas kanggo pendekatan iki:

Kanggo sistem iki bisa digunakake, kabeh obyek bali kudu antarmuka umum. Subkelas bakal bisa ngasilake obyek saka macem-macem kelas sing ngleksanakake antarmuka iki.

Contone, kelas Truk lan Mobil ngetrapake antarmuka CourierTransport kanthi cara ngirim . Saben kelas kasebut ngetrapake metode kasebut kanthi cara sing beda: truk ngirim barang, dene mobil ngirim panganan, paket, lan liya-liyane. Cara pabrik ing kelas TruckCreator ngasilake obyek truk, lan kelas CarCreator ngasilake obyek mobil.

Kanggo klien metode pabrik, ora ana bedane ing antarane obyek kasebut, amarga bakal dianggep minangka sawetara jinis abstrak CourierTransport . Klien bakal Care rumiyin sing obyek duwe cara kanggo ngirim, nanging carane persis cara sing ora penting.

Implementasine ing Jawa:


public interface CourierTransport {
	void deliver();
}
public class Car implements CourierTransport {
	@Override
	public void deliver() {
    		System.out.println("The package is being delivered by car");
	}
}
public class Truck implements CourierTransport {
	@Override
	public void deliver() {
    		System.out.println("The freight is being delivered by truck");
	}
}
public abstract class CourierTransportCreator {
	public abstract CourierTransport createTransport();
}
public class CarCreator extends CourierTransportCreator {
	@Override
	public CourierTransport createTransport() {
    		return new Car();
	}
}
public class TruckCreator extends CourierTransportCreator {
	@Override
	public CourierTransport createTransport() {
    		return new Truck();
	}
}
 
public class Delivery {
	private String address;
	private CourierTransport courierTransport;
 
	public void Delivery() {
	}
 
	public Delivery(String address, CourierTransport courierTransport) {
    	this.address = address;
    	this.courierTransport = courierTransport;
	}
 
	public CourierTransport getCourierTransport() {
    		return courierTransport;
	}
 
	public void setCourierTransport(CourierTransport courierTransport) {
    		this.courierTransport = courierTransport;
	}
 
	public String getAddress() {
    		return address;
	}
 
	public void setAddress(String address) {
    		this.address = address;
	}
}
public static void main(String[] args) {
    	// Accept a new type of order from the database (pseudocode)
    	String type = database.getTypeOfDeliver();
 
    	Delivery delivery = new Delivery();
    	
    	// Set the transport for delivery
        delivery.setCourierTransport(getCourierTransportByType(type));
    	
    	// Make the delivery
        delivery.getCourierTransport().deliver();
 
	}
 
	public static CourierTransport getCourierTransportByType(String type) {
    	switch (type) {
        	case "CarDelivery":
            	return new CarCreator().createTransport();
        	case "TruckDelivery":
            	return new TruckCreator().createTransport();
        	default:
            	throw new RuntimeException();
	    }
	}
    

Yen kita pengin nggawe obyek pangiriman anyar, program kasebut kanthi otomatis nggawe obyek transportasi sing cocog.

Nalika kita kudu ngetrapake pola iki?

1. Nalika sampeyan ora ngerti ing advance jinis lan dependensi saka obyek sing kode kudu bisa karo.

Cara pabrik misahake kode kanggo ngasilake bentuk transportasi saka kode sing nggunakake transportasi kasebut. Akibaté, kode kanggo nggawe obyek bisa ditambah tanpa ndemek kode liyane.

Contone, kanggo nambah support kanggo jinis anyar saka transportasi, sampeyan kudu nggawe subclass anyar lan nemtokake cara pabrik ing sing ngasilake Kayata saka transportasi anyar.

2. Nalika sampeyan pengin ngirit sumber daya sistem kanthi nggunakake maneh obyek sing wis ana tinimbang nggawe sing anyar.

Masalah iki biasane kedadeyan nalika nggarap obyek sing intensif sumber daya, kayata sambungan database, sistem file, lsp.

Coba langkah-langkah sing kudu ditindakake kanggo nggunakake maneh obyek sing wis ana:

  1. Pisanan, sampeyan kudu nggawe repositori sing dienggo bareng kanggo nyimpen kabeh obyek sing digawe.

  2. Nalika njaluk obyek anyar, sampeyan kudu katon ing repositori lan priksa manawa ngemot obyek sing kasedhiya.

  3. Bali obyek menyang kode klien.

  4. Nanging yen ora ana obyek sing kasedhiya, gawe anyar lan tambahake menyang repositori.

Kabeh kode iki kudu dilebokake ing endi wae sing ora bakal ngrusak kode klien. Panggonan sing paling trep bakal dadi konstruktor, amarga kita mung butuh kabeh mriksa kasebut nalika nggawe obyek. Sayange, konstruktor tansah nggawe obyek anyar - ora bisa ngasilake obyek sing wis ana.

Tegese mbutuhake cara liya sing bisa ngasilake obyek sing wis ana lan anyar. Iki bakal dadi cara pabrik.

3. Nalika sampeyan pengin ngidini pangguna kanggo ngluwihi bagean framework utawa perpustakaan.

Pangguna bisa ngluwihi kelas kerangka kerja liwat warisan. Nanging kepiye carane nggawe kerangka nggawe obyek saka kelas anyar iki tinimbang sing standar?

Solusi kasebut supaya pangguna ora mung ngluwihi komponen, nanging uga kelas sing nggawe komponen kasebut. Lan kanggo iki, kelas nggawe kudu duwe cara nggawe tartamtu sing bisa ditetepake.

Kaluwihan

  • Decouples kelas saka kelas transportasi tartamtu.
  • Njaga kode kanggo nggawe wangun transportasi ing sak panggonan, nggawe kode luwih gampang kanggo njaga.
  • Nyederhanakake tambahan mode transportasi anyar menyang program kasebut.
  • Ngleksanakake prinsip mbukak-tutup.

Kakurangan

Bisa nyebabake hierarki kelas paralel sing gedhe, amarga saben kelas produk kudu duwe subkelas pangripta dhewe.

Ayo ngringkes

Sampeyan sinau babagan pola metode pabrik lan ndeleng siji implementasine. Pola iki asring digunakake ing macem-macem perpustakaan sing nyedhiyakake obyek kanggo nggawe obyek liyane.

Gunakake pola metode pabrik yen sampeyan pengin gampang nambah obyek anyar saka subclasses saka kelas sing wis ana supaya bisa sesambungan karo logika bisnis utama lan ora bloating kode amarga beda konteks.