問題
私はデザインパターンにかなり慣れておらず、「HeadFirstDesignPatterns」という本を研究しています。メンバー、モデレーター、管理者の3種類のユーザーでシステムを実装する必要があります。モデレーターは、メンバーが実行できるすべての機能に加えて、追加された機能を実行できます。管理者は、モデレーターが実行できるすべての機能に加えて、追加機能を実行できます。これをインターフェースとクラスで実装する方法の基本的なスケッチを作成しました。経験が浅いので、この設計についてSOコミュニティからのアドバイスが必要です。肥大化しすぎているか、ばかげているか、修正が必要かどうかなどです。だから我慢してください。
考えられる解決策
インターフェースは次のとおりです。
public interface AdminBehavior
{
public addUser();
public deleteUser();
}
public interface ModeratorBehavior
{
public blockUser();
public deletePost();
}
行動クラス:
public class AdminBehaviors implements AdminBehavior
{
public addUser() {
...
}
public deleteUser() {
...
}
}
public class NoAdminBehaviors implements AdminBehavior
{
public addUser() {
...//cannot do
}
public deleteUser() {
...//cannot do
}
}
+ Same as above done for Moderators...classes ModeratorBehaviors and NoModeratorBehaviors
実際のユーザークラス:
public class Member
{
protected ModeratorBehavior moderatorBehavior;
protected AdminBehavior adminBehavior;
public Member() {
moderatorBehavior = new NoModeratorBehavior();
adminBehavior = new NoAdminBehavior();
}
public login() {
...
}
public logout() {
...
}
public post() {
...
}
public comment() {
...
}
//Moderator priv'ed actions
public blockUser() {
moderatorBehavior.blockUser();
}
public deletePost() {
moderatorBehavior.deletePost();
}
//Admin priv'ed actions
public addUser() {
adminBehavior.addUser();
}
public deleteUser() {
adminBehavior.deleteUser();
}
}
public class Moderator extends Member
{
public Moderator() {
moderatorBehavior = new ModeratorBehavior();
adminBehavior = new NoAdminBehavior();
}
}
public class Admin extends Moderator ((or Member?))
{
public Admin() {
moderatorBehavior = new ModeratorBehavior();
adminBehavior = new AdminBehavior();
}
}
個人的には、これは少しやり過ぎか混乱しているように思えます...それを行うためのより良い方法はありますか?