我有一些類是這樣的:是加入這個分層級的反模式
+---+ +---+
| L | ---uses---> | D |
+---+ +---+
| +---+
inherit ----<---- | V |
| +---+ +---+
+---<--- | C |
+---+
假設;類L
是一個抽象類,並且V
和C
從它繼承。並且L
有類D
的財產。 - 對不起,我的壞繪畫和英語的也
現在,我需要添加一個新的類 - RA
- 有D
類和V
類的屬性應該有RA
類的屬性,但我也需要得到財產從類L
因此V
的對象。在我看來是這樣的:
+---+ +---+ +----+
| L | --uses--> | D | <--uses-- | RA |
+---+ +---+ +----+
| +---+ |
inherit ----<----| V | --uses-->--+
| +---+ +---+
+---<---| C |
+---+
我不確定!但在我看來,像某種反固定模式或斷路器的固體原理 - 不知何故!但我無法弄清楚。
我的新圖是反模式嗎?還是有更好的方法來設計這種情況?
請注意,像D
,V
,C
和RA
這樣的類可以實例化。
我的意思是類D
的屬性的使用現在分級在V
。
編輯:
想象一下,我使用的接口 - IGFP
- 通過使用D
財產L
所以在V
和C
返回string
值,現在在V
我需要通過RA
代替D
覆蓋它。
在C#類是:
public abstract class L : VOBase<L>, IGFP {
public virtual D D { get; protected set; }
public virtual string Name { get; protected set; }
public virtual string GFP => $"{D.GFP}/{Name}"; // Here I use D property that I think breaks LSP
}
public class C : L {
public C (D d, string name) {
D = d;
Name = name;
}
}
public class V : L {
public V (RA ra, string name) {
RA = ra;
Name = name;
D = ra.D;
}
public RA RA { get; private set; }
public override string GFP => $"{RA.GFP}/{Name}"; // Here I should override GFP to use RA instead of D
}
public class D : VOBase<D>, IGFP {
public D (U u, string name) {
U = u;
Name = name;
}
public U U { get; private set; }
public string Name { get; private set; }
public string GFP => $"{U.GFP}/{Name}";
}
public class RA : VOBase<RA>, IGFP {
public RA (D d, string name) {
D = d;
Name = name;
}
public D D { get; private set; }
public string Name { get; private set; }
public string GFP => $"{D.GFP}/{Name}";
}
tnx爲你的答案,我認爲你的意思是沒有任何反模式,我會在這裏添加一些代碼以使其更有意義;)。 –
我這樣說:「你的圖不表示任何反模式」 – weston
我已經做了一些簡化,代碼仍然看起來錯了嗎? – weston