วิธีง่ายๆในการบรรลุเป้าหมายนี้คือมีอินเทอร์เฟซที่อนุญาตให้หนึ่งอ่านคุณสมบัติและเรียกวิธีอ่านอย่างเดียวเท่านั้นและคลาสที่ใช้อินเทอร์เฟซนั้นซึ่งช่วยให้คุณเขียนคลาสนั้นได้
วิธีการของคุณที่สร้างมันเกี่ยวข้องกับอดีตแล้วกลับหลังให้เพียงอินเตอร์เฟซแบบอ่านอย่างเดียวที่จะโต้ตอบ สิ่งนี้จะต้องไม่มีการคัดลอกและช่วยให้คุณสามารถปรับพฤติกรรมที่คุณต้องการให้ผู้โทรเห็นได้ง่ายขึ้นเมื่อเทียบกับผู้สร้าง
ใช้ตัวอย่างนี้:
public interface IPerson
{
public String FirstName
{
get;
}
public String LastName
{
get;
}
}
public class PersonImpl : IPerson
{
private String firstName, lastName;
public String FirstName
{
get { return firstName; }
set { firstName = value; }
}
public String LastName
{
get { return lastName; }
set { lastName = value; }
}
}
class Factory
{
public IPerson MakePerson()
{
PersonImpl person = new PersonImpl();
person.FirstName = 'Joe';
person.LastName = 'Schmoe';
return person;
}
}
ข้อเสียเปรียบเพียงอย่างเดียวของวิธีการนี้คือการที่ใคร ๆ ก็สามารถโยนมันไปยังชั้นเรียนการใช้งาน ถ้ามันเป็นเรื่องของความปลอดภัยแล้วการใช้วิธีนี้ก็ไม่เพียงพอ วิธีแก้ปัญหาสำหรับสิ่งนี้คือคุณสามารถสร้างคลาสfacadeเพื่อตัดคลาสที่ไม่แน่นอนซึ่งจะแสดงอินเตอร์เฟสที่ผู้เรียกใช้ด้วยและไม่สามารถเข้าถึงวัตถุภายในได้
ด้วยวิธีนี้การไม่แคสติ้งจะช่วยคุณได้ ทั้งคู่สามารถได้รับจากอินเทอร์เฟซแบบอ่านอย่างเดียวเท่านั้น แต่การส่งคืนออบเจ็กต์จะให้คลาส Facade แก่คุณซึ่งไม่เปลี่ยนรูปเนื่องจากไม่เปลี่ยนสถานะพื้นฐานของคลาสที่ไม่แน่นอน
เป็นมูลค่าการกล่าวขวัญว่าสิ่งนี้ไม่เป็นไปตามแนวโน้มทั่วไปที่วัตถุไม่เปลี่ยนรูปจะถูกสร้างขึ้นเพียงครั้งเดียวและผ่านตัวสร้าง คุณอาจต้องจัดการกับพารามิเตอร์หลายตัว แต่คุณควรถามตัวเองว่าพารามิเตอร์เหล่านี้ทั้งหมดจำเป็นต้องมีการกำหนดไว้ล่วงหน้าหรืออาจมีการแนะนำบางอย่างในภายหลัง ในกรณีนี้ควรใช้ตัวสร้างแบบง่ายพร้อมพารามิเตอร์ที่จำเป็นเท่านั้น กล่าวอีกนัยหนึ่งอย่าใช้รูปแบบนี้หากมีการครอบคลุมถึงปัญหาอื่นในโปรแกรมของคุณ