[英]Proper design of class hierarchy
我正在尝试在C#中设计一个类层次结构,以正确地为我的应用程序模型建模。 问题是我不确定哪种方法正确。
假设我有一个Order类,该类应该是所有订单类型的基类(抽象类)以及使用订单时要使用的引用类型。 订单类只有一个“重要”方法:将其称为order.PlaceOrder(),但是订单可能必须执行(或不要做)多个(正交)要求:记录订单的放置,位置异步订购(PlaceOrder方法立即返回)等。
现在,我想制作实际的具体类,以支持任何数量的这些要求。 例如:类GoogleOrder:LoggedOrder,AsyncOrder等类AppleOrder:AsyncOrder类MicrosoftOrder:Order
问题是:如果我想通过派生所有“策略”来创建此类,那么它们(除了一个)都必须是接口,而我希望继承实际的实现并避免代码的复制/粘贴,我我不确定该怎么做。
我来自C ++背景,在这里我可以从多个基类派生(或者可以使用基于策略的设计,例如Andrei Alexandrescu在他的书中描述的),但是在C#中,我不确定该怎么做似乎是一个非常笼统的问题,我现在应该知道。
任何帮助是极大的赞赏!
似乎您的设计要求使用“ Decorator模式”,Decorator模式可以灵活地动态添加职责/角色,并具有不同的组合,但是您愿意使用它而不是使用继承。
以下是有关如何实现装饰器的示例:
http://alagesann.com/2013/08/16/decorator-pattern-made-easy/ http://en.wikipedia.org/wiki/Decorator_pattern
希望能有所帮助。
这是您的方案的示例代码。 看看是否有帮助。
public abstract class Order
{
public abstract void PlaceOrder(); // log the placeing of the ordr, place the order asynchronously
}
public class MicrosoftOrder : Order // default order
{
public void PlaceOrder()
{
// default implementation for placing order.
}
}
public class AppleOrder : Order // for asycn functionalities.
{
private Order order;
public AppleOrder(Order order)
{
this.order = order;
}
public void PlaceOrder()
{
// Implement async functionalities.
// you can also call default order as
// order.PlaceOrder();
}
}
public class GoogleOrder : Order // logged order
{
private Order order;
public GoogleOrder(Order order)
{
this.order = order;
}
public void PlaceOrder()
{
// Implement logged order
// you can also call default order as
// order.PlaceOrder();
}
}
class Program
{
static void Main(string[] args)
{
Order order = new MicrosoftOrder();
order.PlaceOrder(); // Default Order;
Order orderWithAsync = new AppleOrder(order);
orderWithAsync.PlaceOrder(); // Place order with asycn
Order orderWithAsyncAndlogging = new GoogleOrder(orderWithAsync);
orderWithAsyncAndlogging.PlaceOrder(); // order with asynch and logging.
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.