デザインパターンのシンプルファクトリモード-シンプルファクトリの実現プロセス

単純なファクトリパターン(静的ファクトリメソッドパターンとも呼ばれます)

ファクトリメソッドパターン
抽象ファクトリパターン
抽象ファクトリデータベース接続プールの簡単な実装

1.定義:

単純なファクトリパターンは、渡されたパラメータに従ってオブジェクトを生成する特定のファクトリクラスがあることを意味します。創造的なデザインパターンに属しています。

2.利点:

ファクトリクラスを使用すると、使用可能なオブジェクトが直接取得されます。オブジェクトを新しくする必要はありません。プログラミング効率を向上させます。

3.シンプルファクトリーモデルの3つの役割


シンプルファクトリ:ファクトリパターンには確かにファクトリが必要です。すべてのインスタンスの内部ロジックの実装を担当するシンプルファクトリを作成します。を使用する場合は、ファクトリクラスを直接呼び出して、必要なオブジェクトを作成します。

抽象クラス:単純なファクトリで作成されたすべてのオブジェクトの親クラスであり、共通属性のすべてのインスタンスのパブリックインターフェイスを記述します。

特定のオブジェクト:これは、作成されたファクトリクラスの目標です。

4.シンプルファクトリーの実現

例としてApple携帯電話の製造を取り上げます。Appleは単純なファクトリです。抽象クラスはApple携帯電話の一般的な動作を定義します。特定のオブジェクトはIphoneX、Iphone11、およびIphone12です。

まず、Apple携帯電話に共通の動作を定義します

public interface Iiphone {//抽象类

	void call();//打电话
	
	void watch();//看视频
	
}

Iiphoneインターフェースを実装するための特定のオブジェクトを定義します

public class IphoneX implements Iiphone {//具体对象
	@Override
	public void call() {	
		System.out.println("用IphoneX打电话");
	}
	@Override
	public void watch() {	
		System.out.println("用IphoneX看电视");
	}
}

public class Iphone11 implements Iiphone {
	@Override
	public void call() {
		System.out.println("用Iphone11打电话");
	}
	@Override
	public void watch() {	
		System.out.println("用Iphon11看电视");
	}
}


public class Iphone12 implements Iiphone {
	@Override
	public void call() {
		System.out.println("用Iphone12打电话");
	}
	@Override
	public void watch() {
		System.out.println("用Iphone12看电视");
	}

}

単純なファクトリを設計します(3つの単純なファクトリの実装はここに記述されています)

public class SimpleFactory {//简单工厂

	/**
	 * 这种方式随着产品越来越多会添加更多的case也就是处理逻辑也会越来越多
	 * @param kind
	 * @return
	 */
	public static Iiphone makeIphone(String kind) {
		switch (kind) {
		case "X":
			return new IphoneX();
		case "11":
			return new Iphone11();
		case "12":
			return new Iphone12();
		}
		return null;
	}
	
	/**
	 * 直接提供对象的全类名,通过反射获取实例。解决了上述问题
	 * 但该方式传入的值是字符串,使用不方便
	 * @param className
	 * @return
	 */
	public static Iiphone makeIphoneByClassName(String className) {
		try {
			if(!(className==null||"".equals(className))) {
				
					Iiphone iphone = (Iiphone) Class.forName(className).newInstance();
					return iphone;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 直接传入class对象 解决上述问题
	 * @param classed
	 * @return
	 */
	public static Iiphone makeIphoneByClass(Class <? extends Iiphone> classed) {
		try {
			Iiphone iphone = classed.newInstance();
			return iphone;
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return null;
	}
	
}

3つのファクトリを使用してiPhoneオブジェクトを生成します

public class Client {

	public static void main(String[] args) {
		
		Iiphone iphoneX = SimpleFactory.makeIphone("X");//从工厂获取一个iphoneX对象
		Iiphone iphone11 = SimpleFactory.makeIphoneByClassName("cn.csdn.iphone.bean.impl.Iphone11");//从工厂获取一个iphone11对象
		Iiphone iphone12 = SimpleFactory.makeIphoneByClass(Iphone12.class);//从工厂获取一个iphone12对象
		
		iphoneX.call();
		iphone11.call();
		iphone12.call();
	}
	
}

コンソール出力

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_45355510/article/details/112550617