KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Considering the following sample code: // delivery strategies public abstract class DeliveryStrategy { ... } public class ParcelDelivery : DeliveryStrategy { ... } public class ShippingContainer : DeliveryStrategy { ... } and the following sample Order class: // order (base) class public abstract class Order { private DeliveryStrategy delivery; protected Order(DeliveryStrategy delivery) { this.delivery = delivery; } public DeliveryStrategy Delivery { get { return delivery; } protected set { delivery = value; } } } When i derive a new type of order class, it will inherit the Delivery property of type DeliveryStrategy. Now, when it is given that CustomerOrders must be delivered using the ParcelDelivery strategy, we could consider ' new 'ing the Delivery property in the CustomerOrder class: public class CustomerOrder : Order { public CustomerOrder() : base(new ParcelDelivery()) { } // 'new' Delivery property public new ParcelDelivery Delivery { get { return base.Delivery as ParcelDelivery; } set { base.Delivery = value; } } } (The CustomerOrder obviously needs to ensure that is compatible (polymorph) with Order) This allows direct usage of the ParcelDelivery strategy on CustomerOrder without the need for casting. Would you consider using this pattern? why / why not? Update : i came up with this pattern, instead of using generics, because i want to use this for multiple properties. I don't want to use generic type arguments for all these properties
Tags (comma-separated)
Save Edits
Cancel