2017-04-02 13 views
0

次の問題があります。記事はいくつかの段階を経て、いくつかの異なる役割によって公開されています。最大の拡張を可能に状態を持つ指定されたArticleクラスの設計システム

Writer -> writes 
Approver -> approves 
Admin -> Publishes 

デザインプログラム:これは私が持っているものである 。これが正しいアプローチであるかどうか誰かに教えてもらえますか?そこには良いものがありますか?あなたは「責任のチェーン」と呼ばれて探しているものを

public interface IRole 
{ 
    IRole Write(); 
    IRole Approve(); 
    IRole Publish(); 
} 

internal class Writer : IRole 
{ 
    public IRole Write() 
    { 
     return new Approver(); // next needs approval 
    } 

    public IRole Approve() 
    { 
     return this; 
    } 

    public IRole Publish() 
    { 
     return this; 
    } 
} 

internal class Approver : IRole 
{ 
    public IRole Write() 
    { 
     return new Writer(); 
    } 

    public IRole Approve() 
    { 
     // publish 
     return new Admin(); 
    } 

    public IRole Publish() 
    { 
     return this; 
    } 
} 


internal class Admin : IRole 
{ 
    public IRole Write() 
    { 
     return new Writer(); 
    } 

    public IRole Approve() 
    { 
     return new Approver(); 
    } 

    public IRole Publish() 
    { 
     return this; 
    } 
} 

internal class Article 
{ 
    public Article() 
    { 
     role = new Writer(); 
    } 

    private IRole role { get; set; } 

    public void Write() 
    { 
     role = role.Write(); 
    } 

    public void Approve() 
    { 
     role = role.Approve(); 
    } 

    public void Publish() 
    { 
     role = role.Publish(); 
    } 
} 

    private static void Main(string[] args) 
    { 
     var article = new Article(); 
     article.Approve(); // can't do - write first 
     article.Write(); 
     article.Publish(); // can't do 
     article.Approve(); // can 
     article.Write(); // can go back 
     article.Approve(); // can 
     article.Publish(); 
    } 
+0

拡張性について記事に任意のワークフローを適用することを許可します。そのうちのwrite-> approve-> publishはただ一つのワークフローです –

答えて

関連する問題