ADMIN: //閲覧+管理者閲覧処理 case VIEWER: //閲覧処理 break; } } public void RegisterLogic (Auth auth) { switch (auth) { case ADMIN: //登録処理 break; case VIEWER: //閲覧しかできないので権限エラー break; } } /** * ユーザ操作 Factoryクラス **/ public static class UserOpeFactory { public static void GetOpe(Auth auth) { UserOperation ope //権限に応じた操作クラスを返却 switch (auth) { case ADMIN: return new AdminOpe(); case VIEWER: return new ViewerOpe(); } } } /** * 閲覧処理クラス **/ public class ViewLogic { public void view(Auth auth) { UserOperation ope = UserOpeFactory.GetOpe(auth) ope.閲覧(); } } /** * 登録処理クラス **/ public class RegisterLogic { public void register(Auth auth) { UserOperation ope = UserOpeFactory.GetOpe(auth) ope.登録(); } } /** * ユーザ操作インターフェース **/ interface UserOperation { void 閲覧(); void 登録(); } /** * 管理者用操作クラス **/ public class AdminOpe implements UserOperation { @Override public void 閲覧() { //閲覧処理 } @Override public void 登録() { //登録処理 } } Befor After