1日目の工場パターン

私の理解では、このです:工場出荷時のモデルは、さまざまなオブジェクトを作成し、植物の機能の種類に応じて、パラメータの種類を気にしないことがあります。(シンプル工場)、次のとおりです。

package method.simpleFactory;
import java.util.logging.Logger;


class LoggerFactory {
    //静态工厂方法
    public static Logger createLogger(String args) {
        if(args.equalsIgnoreCase("db")) {
    //连接数据库, 代码省略
    //创建数据库日志记录器对象
            Logger logger = new DatabaseLogger();
    //初始化数据库日志记录器, 代码省略
            return logger;
        }
        else if(args.equalsIgnoreCase("file")) {
    //创建日志文件
    //创建文件日志记录器对象
            Logger logger = new FileLogger();
    //初始化文件日志记录器, 代码省略
                return logger;
        }
        else {
            return null;
        }
    }
}

渡されたパラメータに応じて、ロギングの様々な異なるタイプのを作成するために使用されます。シンプルなファクトリパターンを使用することにより、我々は作成して使用個別のログを、ロガーオブジェクトになる
クライアントは単にロガーオブジェクトは、オブジェクトの作成プロセスを心配することなく、ファクトリクラスによって作成することができます使用していますが、我々は、単純なファクトリパターンが、それを発見しましたこれは、別のオブジェクトの作成と使用を可能にし、
しかし、次の二つの質問がまだあります。

(1)ファクトリクラスは、それが多くのが含まれ、大きすぎる場合...他に...コード、メンテナンスをもたらし、より困難なテスト。

(2)システムの拡張融通の利かない、ログの新しい種類の増加、ビジネスロジックは、静的ファクトリメソッドを変更しなければならない場合、違反
後方閉じ原理を

工場モデルのコードは次のとおりです。

ファクトリクラスは、特定のクラスを作成するための唯一の責任があります:

package method.factory;


//日志记录器接口:抽象接口
interface Logger{
    public void writeLog();
}

//数据库日志记录器:具体产品
class DatabaseLogger implements Logger{
    public  void writeLog(){
        System.out.println("数据库日志记录:");
    }
}
// 文件日志记录器 具体产品
class FileLogger implements Logger{
    public void writeLog(){
        System.out.println("文件日志记录");
    }
}
// 日志记录器工厂接口:抽象工厂
interface LoggerFactory{
    public Logger createLogger();
}

//数据库日志记录器工厂类,具体工厂
class DatabaseLoggerFactory implements LoggerFactory{
    public Logger createLogger(){
        //连接数据库,代码省略
        //创建数据库日志记录器对象
        Logger logger = new DatabaseLogger();
        //初始化数据库日志记录器,代码省略
        return logger;
    }
}

//文件日志记录器工厂:具体工厂
class FileLoggerFactory implements LoggerFactory{
    public Logger createLogger(){
        //创建文件日志记录器对象
        Logger logger = new FileLogger();
        return logger;
    }
}


//客户端测试代码
class Client{
    public static void main(String arg[]){
        LoggerFactory factory;
        Logger logger;
        factory =new FileLoggerFactory();
        logger = factory.createLogger();
        logger.writeLog();
    }
}

概要

次のように工場モデルの方法の主な利点は次のとおりです。

ファクトリメソッドパターン(1)において、顧客が必要とする製品を作成するためにファクトリメソッドだけでなく、特定の隠し顧客への
製品のクラスが、この詳細はインスタンス化され、ユーザのみ、工場に対応する所望の生成物を心配する必要がありますでも作成の詳細については、心配する必要
クラスには、特定の製品カテゴリの名前を知っている必要はありません。

(2)多型と製品設計役割ベースの工場は、ファクトリメソッドパターンの重要な役割です。これは、植物が独立して決定することができますことができます
固定オブジェクトを作成するにはどの製品、およびオブジェクトを作成する方法についての詳細は完全にコンクリート工場でカプセル化されています。成形するためのファクトリメソッド
式理由も多型工場モデルを知られ、それは同じ特定施設抽象親クラスであるため、すべてのクラスです。

(3)ファクトリメソッドを使用してのもう一つの利点は、システム内の新製品に添加され、抽象および変更製品のない抽象工場
提供するインタフェースは、クライアントを変更することなく、特定の植物や他のコンクリート製品、単に追加を変更する必要はありません
システムのスケーラビリティを持つ非常に良い、完全準拠となりますので、その上にボディ工場や特定の製品、「開閉の原則。」

おすすめ

転載: www.cnblogs.com/Jun10ng/p/12367023.html