2016-05-17 12 views
0

各エレベータには一連の状態があります。C#を使用したSOLID原理によるクラス設計

•メンテナンス:エレベータは外部信号に反応しません(独自の信号のみ)。

•スタンド:エレベータは床に固定されています。それが電話を受ける場合。エレベーターがその床にあり、ドアが開いています。それが別の床にある場合は、その方向に移動します。

•上:エレベータが上に移動します。それが床に達するたびに、それは停止する必要があるかどうかをチェックします。そうならドアを止めて開きます。ある時間が経過するのを待ってドアを閉めます(ドアが開いていない限り、リクエストリストからフロアを取り除き、別のリクエストがあるかどうかを確認します)。状態のスタンドダウン•

は:アップ好きが、逆方向に

注:一部のエレベーターは/ first_floor ESP下部に起動しない、空の解体業者の場合にはmin_floor & max_floorはエレベーターのための2つの追加属性です。。。

私のデモデザイン:

public abstract class Elevator 
{ 
    protected bool[] floorReady; 
    protected int CurrentFloor = 1; 
    protected int topfloor; 
    protected ElevatorStatus Status = ElevatorStatus.STOPPED; //ElevatorStatus is enum 

    protected virtual void Stop(int floor){} 
    protected virtual void Descend(int floor) {} 
    protected virtual void Ascend(int floor) {} 
    protected virtual void StayPut() {} 
    protected virtual void FloorPress (int floor){} 

} 

interface ILogger 
{ 
    void RegisterLog(string Message) 
} 

public FileLogger : ILogger 
{ 
    void RegisterLog(string Message) 
    { 
     //Custom Code 
    } 
} 
public class MyElevator : Elevator 
{ 
    // All method overrride for base 
} 

//Client class 
class program 
{ 
    public static void main() 
    { 
    //DI for calling Looging 

    } 
} 

誰かが...事前に

感謝をすべてSOLID原則を満たす私のクラスを設計するために私を助けることができます...私はSOLID原則を使用してエレベーターシミュレータをデザインしたいです。

+1

ようこそ!申し訳ありませんが、ここではコードを書くことはありません。なぜ自分自身を素敵なお茶にしませんか?ソリッドで読む。いくつかの実験を行い、それがどのようにパンしているかを見る。特定の問題に遭遇した場合は、ここに戻ってそれについて投稿してください。あなたもうれしいです! :) – MickyD

+0

私はGitHubに私の試しをアップロードし、ここでリンクを共有しましょう...それはいいですか? –

+0

表示するコードがあることは素晴らしいことです。あなたは[編集](http://stackoverflow.com/posts/37266529/edit)で最低限の金額をここに投稿できますか?覗き見は、一般に外国のサイトや長すぎるコードを見ません。ありがとうございました – MickyD

答えて

0

state patternをご覧ください。

これを使用すると、エレベーターを各特定の状態に移動するためのビジネスルールを移動できます。そのため、Enumを使用する代わりに、各状態が次の処理(次の処理に使用する状態など)を決定するようにします。

エレベータークラス(SOLIDの観点から重要です)を変更せずに、新しい状態を追加することもできます。

関連する問題