corak pembina


Corak Pembina menggunakan berbilang objek mudah untuk membina objek kompleks langkah demi langkah. Corak reka bentuk jenis ini ialah corak ciptaan, yang menyediakan cara optimum untuk mencipta objek.

Kelas Builder akan membina objek akhir langkah demi langkah. Kelas Builder adalah bebas daripada objek lain.

Pengenalan

Niat: Asingkan binaan kompleks daripada perwakilannya, supaya proses pembinaan yang sama boleh mencipta perwakilan yang berbeza.

Penyelesaian utama: Penyelesaian utama: Dalam sistem perisian, kadangkala kita berhadapan dengan penciptaan "objek kompleks", yang biasanya terdiri daripada sub-objek setiap bahagian menggunakan algoritma; disebabkan oleh Pelbagai bahagian objek kompleks ini sering menghadapi perubahan drastik apabila keperluan berubah, tetapi algoritma yang menggabungkannya secara relatifnya stabil.

Bila hendak digunakan: Apabila sesetengah komponen asas tidak berubah, tetapi gabungannya kerap berubah.

Cara menyelesaikan: Asingkan perubahan daripada kebolehubah.

Kod kunci: Pembina: mencipta dan menyediakan tika, pengarah: mengurus kebergantungan kejadian terbina.

Contoh aplikasi: 1. Apabila anda pergi ke KFC, burger, cola, kentang goreng, kepak ayam goreng, dan lain-lain adalah sama, tetapi kombinasinya sering berubah, menghasilkan so- dipanggil "set meal" . 2. StringBuilder dalam JAVA.

Kelebihan: 1. 2. Kawal risiko terperinci dengan mudah.

Kelemahan: 1. Produk mesti mempunyai persamaan dan skopnya terhad. 2. Jika perubahan dalaman adalah kompleks, akan terdapat banyak kelas pembinaan.

Senario penggunaan: 1. Objek yang perlu dihasilkan mempunyai struktur dalaman yang kompleks. 2. Sifat dalaman objek yang perlu dijana adalah saling bergantung.

Nota: Perbezaan daripada mod kilang ialah mod pembina memberi lebih perhatian kepada susunan pemasangan bahagian.

Pelaksanaan

Kami menganggap kes perniagaan restoran makanan segera, di mana set hidangan biasa boleh berupa burger dan minuman sejuk. Burger boleh menjadi burger vegetarian atau burger ayam, dan ia dibungkus dalam karton. Minuman sejuk boleh menjadi Coke atau Pepsi, yang terdapat dalam botol.

Kami akan mencipta antara muka Item dan kelas entiti yang melaksanakan antara muka Item untuk mewakili item makanan (seperti burger dan minuman sejuk), dan <🎜 untuk mewakili pembungkusan makanan >Pembungkusan antara muka dan pelaksanaan Pembungkusan kelas entiti antara muka, hamburger dibungkus dalam karton, dan minuman sejuk dibungkus dalam botol.

Kemudian kami mencipta kelas

Makan dengan ArrayList daripada Item dan Item dengan menggabungkannya untuk mencipta berbeza Makan objek jenis MealBuilder. BuilderPatternDemo, kelas demo kami menggunakan MealBuilder untuk mencipta Meal. builder_pattern_uml_diagram.jpg

Langkah 1

Buat antara muka yang mewakili item makanan dan pembungkusan makanan.

Item.java

public interface Item {
   public String name();
   public Packing packing();
   public float price();	
}

Packing.java

public interface Packing {
   public String pack();
}

Langkah 2

Buat antara muka yang melaksanakan kelas entiti Pembungkusan.

Wrapper.java

public class Wrapper implements Packing {

   @Override
   public String pack() {
      return "Wrapper";
   }
}

Bottle.java

public class Bottle implements Packing {

   @Override
   public String pack() {
      return "Bottle";
   }
}

Langkah 3

Buat antara muka yang melaksanakan Item Kelas abstrak yang menyediakan kefungsian lalai.

Burger.java

public abstract class Burger implements Item {

   @Override
   public Packing packing() {
      return new Wrapper();
   }

   @Override
   public abstract float price();
}

ColdDrink.java

public abstract class ColdDrink implements Item {

	@Override
	public Packing packing() {
       return new Bottle();
	}

	@Override
	public abstract float price();
}

Langkah 4

Buat sambungan daripada Kelas entiti Burger dan ColdDrink.

VegBurger.java

public class VegBurger extends Burger {

   @Override
   public float price() {
      return 25.0f;
   }

   @Override
   public String name() {
      return "Veg Burger";
   }
}

ChickenBurger.java

public class ChickenBurger extends Burger {

   @Override
   public float price() {
      return 50.5f;
   }

   @Override
   public String name() {
      return "Chicken Burger";
   }
}

Coke.java

public class Coke extends ColdDrink {

   @Override
   public float price() {
      return 30.0f;
   }

   @Override
   public String name() {
      return "Coke";
   }
}

Pepsi.java

public class Pepsi extends ColdDrink {

   @Override
   public float price() {
      return 35.0f;
   }

   @Override
   public String name() {
      return "Pepsi";
   }
}

Langkah 5

Buat kelas Meal dengan objek Item yang ditakrifkan di atas.

Meal.java

import java.util.ArrayList;
import java.util.List;

public class Meal {
   private List<Item> items = new ArrayList<Item>();	

   public void addItem(Item item){
      items.add(item);
   }

   public float getCost(){
      float cost = 0.0f;
      for (Item item : items) {
         cost += item.price();
      }		
      return cost;
   }

   public void showItems(){
      for (Item item : items) {
         System.out.print("Item : "+item.name());
         System.out.print(", Packing : "+item.packing().pack());
         System.out.println(", Price : "+item.price());
      }		
   }	
}

Langkah 6

Buat kelas MealBuilder, kelas pembina sebenar bertanggungjawab untuk mencipta objek Meal.

MealBuilder.java

public class MealBuilder {

   public Meal prepareVegMeal (){
      Meal meal = new Meal();
      meal.addItem(new VegBurger());
      meal.addItem(new Coke());
      return meal;
   }   

   public Meal prepareNonVegMeal (){
      Meal meal = new Meal();
      meal.addItem(new ChickenBurger());
      meal.addItem(new Pepsi());
      return meal;
   }
}

Langkah 7

BuiderPatternDemo Gunakan MealBuider untuk menunjukkan corak pembina (Corak Pembina).

BuilderPatternDemo.java

public class BuilderPatternDemo {
   public static void main(String[] args) {
      MealBuilder mealBuilder = new MealBuilder();

      Meal vegMeal = mealBuilder.prepareVegMeal();
      System.out.println("Veg Meal");
      vegMeal.showItems();
      System.out.println("Total Cost: " +vegMeal.getCost());

      Meal nonVegMeal = mealBuilder.prepareNonVegMeal();
      System.out.println("\n\nNon-Veg Meal");
      nonVegMeal.showItems();
      System.out.println("Total Cost: " +nonVegMeal.getCost());
   }
}

Langkah 8

Sahkan output.

Veg Meal
Item : Veg Burger, Packing : Wrapper, Price : 25.0
Item : Coke, Packing : Bottle, Price : 30.0
Total Cost: 55.0


Non-Veg Meal
Item : Chicken Burger, Packing : Wrapper, Price : 50.5
Item : Pepsi, Packing : Bottle, Price : 35.0
Total Cost: 85.5