UI の観点からメニューの問題が見られる場合は、Abstract Factoryデザイン パターンを使用できます。一般に、メニューを生成する共通のインターフェイスが 1 つあります。
interface MenuFactory {
Object createMainMenu();
Object createSomeOtherMenu();
}
および 2 つの実装:
public class DesktopAppMenuFactory implements MenuFactory {
public Object createMainMenu() {
ask dao for menus intended for desktop variant
return ...
}
public Object createSomeOtherMenu() {
ask dao for menus intended for desktop variant
return ...
}
}
public class MobileAppMenuFactory implements MenuFactory {
public Object createMainMenu() {
ask dao for menus intended for mobile variant
return ...
}
public Object createSomeOtherMenu() {
ask dao for menus intended for mobile variant
return ...
}
}
次に、クライアント タイプを指定して適切なファクトリを作成するメソッドを記述します。
public static MenuFactory createMenuFactory(String clientType) {
if( clientType is desktop.. ) {
return new DesktopAppMenuFactory();
} else if( clientType is mobile.. ) {
return new MobileAppMenuFactory();
}
}
どのバリアントであるかを気にせずに、コントローラーと JSP で MenuFactory を使用します。これは、上記のユーティリティ メソッドにある唯一の if ステートメントですcreateMenuFactory()
。
一方、データの観点から問題を見る場合は、サービス層に適用される戦略パターンが適切です。しかし、コードコードは上記と非常によく似たものになり、*Factory
名前が変更され*Service
、実装はファクトリではなく戦略と呼ばれます。