ホームページ >Java >&#&チュートリアル >抽象的な工場パターン
Abstract Factory Pattern は、具体的なクラスを指定せずに、関連オブジェクトまたは依存オブジェクトのファミリーを作成するためのインターフェイスを提供する作成パターンです。
1 つのファミリー内のオブジェクトが連携して動作することが期待されるオブジェクトのファミリーがあり、それでも具体的なプロダクトとそのファクトリーをクライアント コードから分離したい場合は、抽象ファクトリー パターンを使用します。
クライアントが好みに応じて明るい UI または暗い UI を選択できる、シンプルなテーマ アプリケーションを開発する予定です。ボタン、メニュー、ツールバーの 3 つのコンポーネントを用意します。各コンポーネントには明るいスタイルと暗いスタイルの外観があります。
明らかに、すべてのライト テーマ コンポーネントが連携して動作することを確認したいと考えています (ライト ボタン、ダーク メニュー、およびライト ツールバーを同時に表示したくありません)。さらに、将来的には「ハイコントラスト」テーマなどの他のテーマを追加する可能性も残したいと考えています。
テーマアプリケーション
これが私たちのクライアントです。コンストラクターは引数として具象ファクトリを受け取り、createComponents() が対応するコンポーネントを作成します。クライアントは抽象的なファクトリーと抽象的な製品にのみ依存します。
テーマファクトリー
すべての具体的なテーマのインターフェース。
具体的なテーマファクトリー
ThemeFactory のメソッドの実際の実装を提供します。これらのコンクリート工場はコンクリート製品を製造します。
製品インターフェース
コンポーネントのインターフェイス。
コンクリート製品
特定の動作を定義します。
public interface Button { void render(); }
public class DarkButton implements Button{ @Override public void render() { System.out.println("Successfully render a dark button"); } }
public class LightButton implements Button { @Override public void render() { System.out.println("Successfully render a light button"); } }
メニュー コンポーネントとツールバー コンポーネントのコードも同じ方法で記述できます。
public interface ThemeFactory { Button createButton(); Menu createMenu(); Toolbar createToolbar(); }
public class DarkThemeFactory implements ThemeFactory { @Override public Button createButton() { return new DarkButton(); } @Override public Menu createMenu() { return new DarkMenu(); } @Override public Toolbar createToolbar() { return new DarkToolbar(); } }
public class LightThemeFactory implements ThemeFactory { @Override public Button createButton() { return new LightButton(); } @Override public Menu createMenu() { return new LightMenu(); } @Override public Toolbar createToolbar() { return new LightToolbar(); } }
// This is our client code, notice client sees neither concrete products nor concrete factories public class ThemeApplication { private ThemeFactory themeFactory; private Button button; private Menu menu; private Toolbar toolbar; public ThemeApplication(ThemeFactory factory) { themeFactory = factory; createComponents(); } public void createComponents() { button = themeFactory.createButton(); menu = themeFactory.createMenu(); toolbar = themeFactory.createToolbar(); } public void renderComponents() { button.render(); menu.render(); toolbar.render(); } }
public class ThemeApplicationTestDrive { public static void main (String[] args) { ThemeFactory darkFactory = new DarkThemeFactory(); ThemeApplication app1 = new ThemeApplication(darkFactory); app1.renderComponents(); System.out.println("*******************"); ThemeFactory lightFactory = new LightThemeFactory(); ThemeApplication app2 = new ThemeApplication(lightFactory); app2.renderComponents(); } }
出力:
Successfully render a dark button Successfully render a dark menu Successfully render a dark toolbar ******************* Successfully render a light button Successfully render a light menu Successfully render a light toolbar
ここですべてのデザイン パターンの実装を確認できます。
GitHub リポジトリ
追伸
技術ブログを書くのは初めてです。文章を改善するためのアドバイスや、わかりにくい点がある場合は、コメントを残してください。
読んでいただきありがとうございます:)
以上が抽象的な工場パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。