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 kelasMakan dengan ArrayList daripada Item dan Item dengan menggabungkannya untuk mencipta berbeza Makan objek jenis MealBuilder. BuilderPatternDemo, kelas demo kami menggunakan MealBuilder untuk mencipta Meal.
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