מנשק מאפשר לבטא את ההגדרה של שירות במונחים של טיפוס נתונים מופשט (מנשק) במקום במונחים של מימוש ספיציפי של טיפוס הנתונים (מחלקה). זה מאפשר לנו לקרוא לאותו שירות עם ארגומנטים שהם מטיפוסים שונים (מחלקות שונות), כל זמן שההבדלים בין טיפוסי הארגומנטים אינם רלוונטיים לפעולה של השירות.
אבל במקרה אחד התחביר של ג'אווה דורש התייחסות למימוש ספיציפי ולא לטיפוס מופשט: בקריאה לאופרטור new
.
הארגומנט של האופרטור הזה חייב להיות שם של מחלקה שהבנאי שלה יופעל. אם
שירות חייב ליצור עצמים חדשים, הוא חייב לציין את המחלקה שלהם.
במקרים רבים אנו רוצים לאפשר לקוד הקורא להחליט על הזהות של מחלקה שממנה שירות נקרא ייצר עצמים חדשים. יכולת כזו מאפשרת לנתק לחלוטין את השירות מתלות במימוש ספיציפי של טיפוס נתונים.
מכיון ש-new
חייב לקבל שם מחלקה, היינו רוצים להעביר לשירות שגרה שתקרא ל-new
במקומו. אם זה היה ניתן, היינו יכולים להעביר שגרה שמייצרת עצמים ממחלקה
מסויימת, או שגרה אחרת שמייצרת עצמים ממחלקה אחרת. אבל בג'אווה לא ניתן
להעביר שגרה לשירות, רק התייחסויות לעצמים. לכן נעטוף את השגרה במחלקה.
מכיון שאין לנו צורך ביותר מעצם אחד מהמחלקה, נדאג שאכן ייווצר ממנה עצם
אחד לכל היותר. עצם כזה, שתפקידו ליצור עצמים כדי להסתיר את הקריאה ל-new
, נקרא בית חרושת (factory).
בית חרושת יכול לאפשר ליצור עצמים ממחלקה אחת, או מכמה (בית החרושת
בתוכנית הנילוות יכול לייצר עצמים משתי מחלקות שונות). בית חרושת יכול
להיות מתוחכם ולייצר עצמים ממחלקות שונות בהתאם לתנאים משתנים. למשל, בית
חרושת יכול לייצר עצמים ממחלקה אחת כאשר יש זיכרון פנוי בשפע, אבל עצמים
ממחלקה אחרת (פחות יעילה אבל יותר חסכונית בזיכרון) אם אין הרבה זיכרון
פנוי.