良いプログラマーJavaチュートリアルはJavaの設計モードを分かち合います


良いプログラマーJava実用教程の設計モード、まず単例の設計モードを話します
シングルデザインモード
/*
 *     :                   ,        .
 *        :  ,  ,  ,   ,  ,  ,    ,   23 
 *   :           ,          ,         .
 * 
  *   :
 * 1.               
 * 2.        
 * 3.      :       s----  static   
 * 4.    
 * 5.     
 * 
 *   :
 *    :                    .
 *    :           (          )
 * 
 *   :
 * 1.  
 * 2.        .
 * 
 *         :
 * *   :                  ,      ,      ,      
 * 
 *    ,        :            
 *   :           ,     ,          ,         ,          
 * 
 *           ?
 *            ,               ,     .  ,          ,     .
 */

工場設計モード
単純ファクトリモードは作成モードに属し、スタティックファクトリメソッド(Static Factory Method)モードとも呼ばれますが、23種類のGOF設計モードの1つではありません.単純ファクトリモードは、1つのファクトリオブジェクトがどの製品クラスを作成するかを決定する例です.単純ファクトリモードは、ファクトリモードファミリーの中で最も単純で実用的なモードであり、異なるファクトリモードの特殊な実装と理解できます.
Lambda式
Lambda式はJava 8以降の新しい特性Lambda式は関数式プログラミングJava-->オブジェクト向け言語blockコードブロック(閉パッケージ)関数式プログラミング(プロセス向けに近い)-->オブジェクト向け関数式プログラミングとは何ですか?関数式プログラミング(英語:functional programming)または関数プログラム設計とも呼ばれ、汎関数プログラミングとも呼ばれ、コンピュータ演算を数学上の関数(cos sin tan)計算と見なし、プログラム状態や可変オブジェクトの使用を避けるプログラミングモデルである.関数プログラミング言語の最も重要な基礎はλ演算(lambda calculus).そしてλ演算された関数は、入力(引数)と出力(出力値)として関数を受け入れることができます.ps:λこの記号は検索入力方式の記号に表示できます
オブジェクト向けプログラミングではオブジェクト向けプログラミング(英語:Object-oriented programming、略称:OOP)は、オブジェクトの概念を持つプログラムプログラミングのモデルであり、プログラム開発の方法でもある.データ、属性、コードと方法を含む可能性がある.オブジェクトはクラスのインスタンスを指す.オブジェクトをプログラムの基本単位とし、ソフトウェアの再利用性、柔軟性、および拡張性、オブジェクト内のプログラムは、オブジェクトに関連するデータにアクセスしたり、頻繁に変更したりすることができます.オブジェクト向けプログラミングでは,コンピュータプログラムは互いに関連するオブジェクトとして設計される.
Lambda式で何ができるの?
インタフェースの実装方式を匿名の内部クラスの形式に簡略化して1つの関数式の方式に簡略化してインタフェースの実装を簡略化する
構文:
(パラメータ)->式または{メソッドボディ};ps:Lambds式は、現在のインタフェースを実現する方法と簡単なvoid show()である.()->System.out.println(「Lambda式です」)
1.パラメトリックリストのパラメトリックタイプを省略することができ、パラメトリックリストに1つのパラメータしかない場合、パラメトリックリストの元かっこはpsを省略することもできる:パラメトリックリストはインタフェースで必要な実現方法のパラメトリックリストvoid show(int a,int b)に対応する.void display(int c);(int a,int b)->「実現」;(int a)->「実現」;a->実現;
2.矢印(->)は、英語で符号のマイナス(-)+大きい(>)が実装コードブロックを指す必要があります.
3.コードブロック:コードブロックに1つの文しか含まれていない場合、Lambda式ではカッコを省略できますLambda式ではreturnが1つしかない場合、returnキーワードを省略できますLambda式に複数の文(実装方法の論理)がある場合はカッコを省略できません
ps:JavaにおけるLambda式の結合とインタフェースによるStream APIの完了-->LambdaパケットTestクラスLambda式をストリーミングプログラミングで見るLambdaパケットTestDemoクラスもパラメータ伝達として見ることができる
ps:Java 8でこのインタフェースをLambda式で実装する必要がある場合は、このインタフェースに注記@FunctionalInteFaceを提供する必要があります.
Lambda式グローバル変数とローカル変数を参照LambdaパッケージTestDemo 2クラスを参照
Lambda式式参照構造方法と方法参照
1.クラスメソッドが関数インタフェースで定義した抽象メソッドを参照し、メソッドの実装がクラスメソッドの実装をトリガする場合、LambdaパッケージTestDemo 3を参照してください.
2.インスタンスメソッド(メンバーメソッド)を参照関数インタフェースで定義された抽象メソッドであり、メソッドの実装がクラスの作成をトリガーすることによって完了する場合、LambdaパッケージTestDemo 4を参照してください.バージョン2:関数インタフェースで定義された抽象メソッドで、メソッドの実装は抽象メソッドの特定のオブジェクトパラメータによって完了することができます:形式は完了しません::以前は現在のオブジェクトのデータがタイプで、newではなくオブジェクトを出してLambdaパッケージTestDemo 5を見ることができます;3.構造方法を参照関数インタフェースで定義された抽出方法であり、この方法の実装はnewを通じてオブジェクトを作成することであり、この場合、:形式を使用してpsを完了する:固定形式構築オブジェクトのタイプ::new;LambdaバッグTestDemo 6を見てください.
まとめ:
上記の2つのケースでは、静的メソッド/メンバーメソッドLambda式で静的メソッドまたはメンバーメソッドが参照されている場合に一言だけ、新しい形式クラスまたは(オブジェクト)が使用されています.使用することができます::形式は簡略化します::以前はこの方法の主要な呼び出しの発起者のクラス/オブジェクト::後の静的方法/メンバーの方法ps:必ず主要な方法の後ろでパラメータの呼び出しの方法のパラメータに入ってはいけなくて、インタフェースの中の方法のパラメータを通じてLambda式と内部の匿名のクラスの違いを伝達します1.匿名内部クラスは任意のインタフェースのためにオブジェクトを作成することができ、インタフェースにどれだけの抽象メソッドが含まれているかにかかわらず、匿名内部クラスがすべてのメソッドを実装すればよいが、Lambda式は関数インタフェースのためにオブジェクトを作成することしかできない(抽象メソッドは1つしか実現できない).匿名の内部クラスは抽象クラス、さらには一般クラスのオブジェクトを作成することができるが、Lambda式は関数インタフェースのオブジェクト3のみを作成することができる.匿名の内部クラス実装の抽象メソッドメソッドメソッドボディは、インタフェースを呼び出してデフォルト(default)メソッドを定義することを許可するが、Lambda式の実装はデフォルトメソッドを呼び出すことを許可しないLambdaの実際の参照はLambdaパッケージTestDemo 7を参照する.
ps:1.形式を覚えてScalaのために準備する必要があります.Lambdaは匿名内部クラスの一度に実現する方式を置き換えることができるLambdaはインタフェースの一つの抽出方法しか実現できない.
テンプレート設計モード
/*
 *       :            ,       ,       ,        .             
 *                           .                     .
 * 
 *   :         
 *   :     :    ,    
 *       :       
 */

内部クラス
/*
 *    :   A    B      ,       A      ,      ,         A    ,          
   :          java       
 */

 /*
 *      :           
 *     :             
 */

 /*
 *      :       static   .
   :             ,              
 */

 /*
 *      (  ):                ,       
 *       :
 *        :
 * 
 *             :1.                 
 * 
               :
 * 1.                  ,       
 * 2.         
 * 3.             (    )
 * 
 *       :
 * 1.        
 * 2.    
 * 3.                     ,      
 * 4.            ,        
 */