"Halo, Amigo!"

"Hai, Bilaabo!"

"Topik kita dina iki ora mung menarik - bakal dadi epik banget."

"Dina iki aku arep kanggo sampeyan apa pola desain. "

"Keren! Aku wis krungu akeh babagan dheweke. Aku ora sabar!"

"Programer sing berpengalaman kudu nulis akeh kelas. Nanging sing paling angel ing proyek iki yaiku mutusake kelas sing bakal digawe lan carane mbagi karya ing antarane."

"Sing luwih dheweke ngrampungake pitakonan kasebut, luwih akeh dheweke ngerti yen sawetara solusi apik, dene liyane ala."

"Solusi ala biasane nggawe masalah luwih akeh tinimbang ngatasi. Padha ngluwihi, nggawe akeh watesan sing ora perlu, lan liya-liyane. Lan solusi sing apik yaiku sebaliknya."

"Apa ana analogi sing bisa sampeyan lakoni?"

"Ayo ngomong sampeyan mbangun omah. Lan sampeyan mikir babagan apa sing bakal digawe. Sampeyan mutusake yen sampeyan butuh tembok, lantai, lan langit-langit. Akibate, sampeyan mbangun omah kanthi payon sing rata lan ora ana. pondasi. Omah sing kaya ngono bakal retak, lan atap bakal bocor. Iki solusi sing ora apik."

"Kosok baline, omah sing dumadi saka pondasi, tembok, lan atap gable bakal dadi solusi sing apik. Salju salju sing gedhe ora ana masalah, amarga salju bakal geser saka atap. stabilitas. Kita bakal ngarani solusi sing apik.

"Aku weruh. Thanks."

"Oke. Banjur aku bakal nerusake."

"Ing wektu, solusi sing apik dikenal minangka pola desain, dene sing ala diarani anti-pola."

"Pola desain kaya jawaban kanggo pitakonan. Iku angel dimengerteni yen sampeyan ora tau krungu pitakonan."

" Kategori pola pisanan yaiku pola penciptaan. Pola kasebut nggambarake solusi sing apik sing ana hubungane karo nggawe obyek."

"Apa sing rumit banget babagan nggawe obyek?"

"Minangka kedadeyan, iku mung sing bakal kita jelajahi saiki."

Pola Singleton.

Pola desain: tunggal, pabrik, metode pabrik, pabrik abstrak - 1

"Asring ing program, mung salinan siji saka sawetara obyek bisa ana. Contone, console, logger, kolektor sampah, etc."

" Solusi sing ora becik: aja nggawe obyek apa wae - mung nggawe kelas sing cara kabeh statis."

" Solusi sing apik:  nggawe obyek siji lan simpen ing variabel statis. Nyegah nggawe obyek kapindho kelas. Contone:"

Tuladha
class Sun
{
 private static Sun instance;
 public static Sun getInstance()
 {
  if (instance == null)
  instance = new Sun();

  return instance;
 }

 private Sun()
 {
 }
}
Carane diarani
Sun sun = Sun.getInstance();

"Iku prasaja."

"Kaping pisanan, kita nggawe konstruktor pribadi. Saiki mung bisa diarani saka njero kelas kita. Kita wis ngalangi nggawe obyek Sun ing endi wae kajaba ing metode kelas Sun."

"Kapindho, obyek saka kelas iki mung bisa dipikolehi dening nelpon getInstance () cara. Ora mung iki cara sing bisa nggawe obyek Sun, iku uga njamin sing ana mung siji obyek.

"Aku weruh."

"Nalika sampeyan mikir, "Saiki, kepiye carane aku bakal nindakake?", pola ujar, "sampeyan bisa nyoba iki - iki minangka salah sawijining solusi sing paling apik."

"Matur nuwun. Saiki kahanan wis mulai jelas."

"Sampeyan uga bisa maca babagan pola iki  ing kene ."

Pola pabrik.

Pola desain: tunggal, pabrik, metode pabrik, pabrik abstrak - 2

"Iki kahanan sing programer ngadhepi kerep banget. Sampeyan duwe sawetara kelas dhasar lan akeh subclasses. Contone, kelas karakter game (GamePerson) lan kelas kanggo kabeh karakter liyane kang oleh warisan."

"Ayo ngomong sampeyan duwe kelas ing ngisor iki:"

Tuladha
abstract class GamePerson
{
}

class Warrior extends GamePerson
{
}

class Mag extends GamePerson
{
}

class Troll extends GamePerson
{
}

class Elf extends GamePerson
{
}

"Pitakonan yaiku kepiye carane ngatur nggawe obyek kelas kasebut kanthi fleksibel lan gampang."

"Yen masalah iki katon adoh kanggo sampeyan, mbayangno yen ing game sampeyan kudu nggawe puluhan pedhang lan tameng, atusan mantra sihir, lan ewu monster. Sampeyan ora bisa nindakake tanpa pendekatan sing trep kanggo nggawe obyek ing kene. "

" Pola Pabrik nawakake solusi sing apik."

"Kaping pisanan, kita kudu nggawe enum sing nilaine cocog karo macem-macem kelas."

"Kapindho, nggawe kelas Pabrik khusus sing nduweni metode statis sing nggawe obyek adhedhasar nilai enum."

"Tuladhane:"

Tuladha
public enum PersonType
{
 UNKNOWN,
 WARRIOR,
 MAG,
 TROLL,
 ELF,
}

public class PersonFactory
{
 public static GamePerson createPerson(PersonType personType)
 {
  switch(personType)
  {
   WARRIOR:
   return new Warrior();
   MAG:
   return new Mag();
   TROLL:
   return new Troll();
   ELF:
   return new Elf();
   default:
   throw new GameException();
  }
 }
}
Carane diarani
GamePerson person = PersonFactory.createPerson(PersonType.MAG);

"Ing tembung liyane, kita nggawe kelas khusus kanggo ngatur nggawe obyek?"

"Ya wis."

"Dadi apa kaluwihan sing diwenehake iki?"

"Kaping pisanan, ing kelas iki, obyek bisa diwiwiti kanthi data sing dibutuhake."

"Kapindho, sampeyan bisa ngliwati nilai enum sing dibutuhake ing antarane cara sing dikarepake supaya bisa nggawe obyek sing dikarepake."

"Kaping telu, jumlah kolom enum ora kudu cocog karo jumlah kelas. Bisa uga ana akeh jinis karakter, nanging sawetara kelas."

"Contone, Mag & Warrior bisa nggunakake siji kelas (Manusia), nanging kanthi kekuatan lan sifat sihir sing beda (argumen konstruktor).

"Iki kaya apa (kanggo gamblang, aku uga wis nambahake elf peteng):"

Tuladha
public enum PersonType
{
 UNKNOWN,
 WARRIOR,
 MAG,
 TROLL,
 ELF,
 DARK_ELF
}

public class PersonFactory
{
 public static GamePerson createPerson(PersonType personType)
 {
  switch(personType)
  {
   WARRIOR:
   return new Human(10, 0); // Strength, magic
   MAG:
   return new Human(0, 10); // Strength, magic
   TROLL:
   OGR:
   return new Troll();
   ELF:
   return new Elf(true); // true – good, false – evil
   DARK_ELF:
   return new Elf(false); // true – good, false – evil
   default:
   throw new GameException();
  }
 }
}
Carane diarani
GamePerson person = PersonFactory.createPerson(PersonType.MAG);

"Ing conto ing ndhuwur, kita mung nggunakake telung kelas kanggo nggawe enem macem-macem obyek. Iki trep banget. Menapa malih, kita duwe kabeh logika iki klempakan ing siji kelas lan siji cara."

"Saiki umpamane kita arep nggawe kelas sing kapisah kanggo Ogre - kita mung ngganti sawetara baris kode ing kene, lan ora setengah aplikasi."

"Aku setuju. Iku solusi sing apik."

"Lan sing dakkandhakake: pola desain minangka koleksi solusi sing apik."

"Aku uga pengin ngerti ngendi kanggo nggunakake ..."

"Ya, aku setuju, sampeyan ora bakal ngerti langsung. Nanging, luwih becik ngerti lan ora bisa nindakake tinimbang ora ngerti lan ora bisa nindakake. Iki link liyane sing migunani kanggo sampeyan babagan pola iki: Pola Pabrik "

"Oh, matur nuwun."

" Pola pabrik abstrak ."

"Kadhangkala yen sampeyan duwe akeh obyek, ide nggawe pabrik kanggo pabrik kasebut dhewe. Pabrik sing kaya ngono diarani pabrik abstrak ."

"Endi sing perlu iki?!"

"Upami sampeyan duwe sawetara klompok obyek sing padha. Iki luwih gampang dituduhake kanthi conto."

"Saiki, ayo ngomong sampeyan duwe telung balapan ing game sampeyan: manungsa, elf, lan dhemit. Lan kanggo keseimbangan, saben balapan duwe prajurit, pemanah, lan penyihir. Pemain mung bisa nggawe obyek saka balapan sing dimainake. ing game. Mangkene carane katon ing kode:"

Pranyatan kelas prajurit
class Warrior
{
}
class Archer
{
}
class Mag
{
}
manungsa
class HumanWarrior extends Warrior
{
}

class HumanArcher extends Archer
{
}

class HumanMag extends Mag
{
}
Elf
class ElfWarrior extends Warrior
{
}

class ElfArcher extends Archer
{
}

class ElfMag extends Mag
{
}
dhemit
class DaemonWarrior extends Warrior
{
}

class DaemonArcher extends Archer
{
}

class DaemonMag extends Mag
{
}

Lan saiki ayo nggawe balapan, utawa bisa uga diarani tentara.

tentara
abstract class Army
{
 public Warrior createWarrior();
 public Archer createArcher();
 public Mag createMag();
}
tentara manungsa
class HumanArmy extends Army
{
 public Warrior createWarrior()
 {
  return new HumanWarrior();
 }
 public Archer createArcher()
 {
  return new HumanArcher();
 }
 public Mag createMag()
 {
  return new HumanMag();
 }
}
Tentara elf
class ElfArmy extends Army
{
 public Warrior createWarrior()
 {
  return new ElfWarrior();
 }
 public Archer createArcher()
 {
  return new ElfArcher();
 }
 public Mag createMag()
 {
  return new ElfMag();
 }
}
tentara setan
class DaemonArmy extends Army
{
 public Warrior createWarrior()
 {
  return new DaemonWarrior();
 }
 public Archer createArcher()
 {
  return new DaemonArcher();
 }
 public Mag createMag()
 {
  return new DaemonMag();
 }
}

"Nanging carane sampeyan nggunakake iki?"

"Sampeyan bisa nggunakake kelas Tentara, Warrior, Archer, lan Mage ing ngendi wae ing program kasebut, lan kanggo nggawe obyek sing dibutuhake - mung ngliwati obyek subkelas Tentara sing dikarepake."

"Tuladhane:"

Tuladha
Army humans = new HumanArmy();
Army daemons = new DaemonArmy();

Army winner = FightSimulator.simulate(humans, daemons);

"Ing conto ing ndhuwur, kita duwe kelas sing simulasi perang antarane macem-macem balapan (tentara). Sampeyan mung kudu ngliwati rong obyek Tentara. Kelas kasebut dhewe digunakake kanggo nggawe macem-macem pasukan lan nganakake pertempuran virtual ing antarane supaya bisa ngenali pemenang. ."

"Aku weruh. Thanks. A pendekatan tenan menarik."

"Solusi sing apik, preduli saka apa sing sampeyan ucapake."

"Ya wis."

"Iki link liyane sing apik babagan topik:  Pola pabrik abstrak "