2017-04-02 15 views
0

存在以下問題。文章在經過幾個不同的角色出版之前經歷了幾個階段。給定文章類別的狀態設計系統

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只是一個工作流程 –

回答