0

これは宿題の質問です。

次の問題があります。家主のタイプとテナントのタイプに応じて、家主がテナントに課税または請求する方法をシミュレートできるシステムを作成する必要があります。家主は、下層階級の家主(安っぽいアパートを管理する)、中層の家主(まあまあの建物を管理する)、および高層の家主(最高級の建物を管理する)である可能性があります。テナントは、無責任なテナント (数か月の遅延で支払う) または責任あるテナント (期限内に支払う) である可能性があります。

家主の種類に応じた固定料金があり、テナントの種類と家主の種類に応じてペナルティまたは特典が与えられます。無責任なテナントには追加料金がかかり、責任者には支払いに対してボーナスが与えられます早いか何でも、しかしこれは、彼が高級な家主または中流階級の家主によって管理されている建物に住んでいる場合にのみ適用されます. テナントには、家賃として支払わなければならないお金を格納する属性があるはずです。

この問題を次のように図解しました。

  • ランドロードの抽象クラスで、それを継承する次の具体的なクラスがあります: ハイ クラス、ロー クラス、およびミドル クラス。
  • Irresponsible および Responsible の具体的な子孫を持つ Tenant 抽象クラス。

私の問題は、テナントに課金する方法をどのように実装するかです。私は次のように提案しました。Landlord クラスは、クラス Tenant のパラメーターを取り、テナントのタイプに応じて料金を請求する、chargeTheTenant() という名前の仮想メソッドを定義します。問題は、このためにリフレクションを使用して、Landlord クラスがどのような種類のテナントを持っているかを調べる必要があり、リフレクションを使用しないようにする必要があること、およびこれを解決するための設計パターンを検索する必要があることです。 .

この場合、リフレクションを使用しないようにするには、どの設計パターンを検討する必要がありますか?

ありがとう

4

2 に答える 2

0

このような場合、Tenant 抽象クラスは過度の抽象化の兆候である可能性があります。メソッドIsIrresponsible () でテナント クラスを 1 つだけ使用する場合、家主はこのメソッドの戻り値に基づいて直接決定を下すことができます。

抽象 Tenant クラスの使用を主張する場合は、IsIrresponsible () 関数を仮想化してください。また、 IrresponsibleTenantサブクラス内では常に true を返し、 ResponsibleTenantサブクラスでは false を返します。でも個人的には割に合わないと思います。

于 2013-11-08T07:57:40.810 に答える