1.オブジェクト指向の7つの原則
開閉の原則:拡張のために開く、変更のために閉じる
。リヒターの置換原則:継承は、スーパークラスが所有するプロパティがサブクラスで引き続き有効であることを保証する必要があります。
依存関係の反転の原則:実装指向プログラミングではなく、インターフェイス指向プログラミング;
単一責任の原則:制御クラスの粒度、オブジェクトの分離、およびその凝集性の向上;
インターフェース分離の原則:各クラスに必要な特別なインターフェースを確立する必要があります。
ディミットのルール:友達とだけ話し、「見知らぬ人」;
複合再利用の原則:最初にそれを達成するために組み合わせまたは集約および他の関連関係を使用することを試み、次にそれを達成するために継承関係を使用することを検討します。
2.デザインパターンの分類
- 作成モード:オブジェクトの作成方法を説明します。オブジェクトの作成と使用が分離されていることが特徴です。
シングルトン、ファクトリ、抽象ファクトリ、ビルダー、プロトタイプモード
理解:帮助程序员省去new对象的过程
- 構造モード:特定のレイアウトに従ってクラスまたはオブジェクトのより大きな構造の形成を記述します。機能:プログラムの構造から疎結合が実現されるため、クラス構造全体を拡張して、より大きな問題を解決できます。
アダプター、ブリッジ、装飾、組み合わせ、外観、フライ級、代理店モデル - 行動モード:クラスまたはオブジェクトが互いに協力して、単一のオブジェクトが完了できないタスクを共同で完了する
方法を説明します。主に、責任テンプレートメソッドモード、コマンドモード、イテレーター、オブザーバーモード、中間モード、メモモード、デコーダーモード、状態モードを割り当てます。 、戦略モード、責任チェーンモード、訪問者モード。
1.シングルトンモード
最も重要なアイデアは、コンストラクターの民営化です(メモリ内にオブジェクトが1つしかないことを保証するために、他の人はこのオブジェクトを新しくすることはできません)
1.1空腹の中国のシングルトン
最初の新しいオブジェクト;
短所:リソースの浪費を引き起こす可能性があります。
public class Hungry {
private byte[] data= new byte[1024*1024];
private byte[] dat2= new byte[1024*1024];
private byte[] dat3= new byte[1024*1024];
private Hungry() {
}
private final static Hungry HUNGRY = new Hungry();
public static Hungry getInstance(){
return HUNGRY;
}
}
1.2レイジーシングルトン
public class LazyMan {
private LazyMan(){
}
private volatile static LazyMan lazyMan;
public static LazyMan getInstance(){
if(lazyMan==null){
synchronized (LazyMan.class){
if(lazyMan==null){
//这里不是原子性操作
/*1.分配内存空间;2.执行构造方法,初始化对象;3把这个对象指向这个空间*/
lazyMan=new LazyMan();
}
}
}
return lazyMan;
}
}
1.3静的内部クラスの形式のシングルトン
public class Holder {
private Holder(){
}
public static Holder getInstance(){
return InnerClass.HOLDER;
}
public static class InnerClass{
private static final Holder HOLDER = new Holder();
}
}
シングルトンは安全ではありません(反射が壊れます)
1.4列挙型のシングルトン(安全)
public enum EnumSingle {
INSTANCE;
public EnumSingle getInstance(){
return INSTANCE;
}
}
2.工場モデル
役割:作成者と発信者は分離されています
コアエッセンス:
- 新規はインスタンス化されたオブジェクトには適用されません。代わりにファクトリメソッドを使用してください
- 実装クラスが選択され、統合された管理と制御のためにオブジェクトが作成されます。呼び出し元を実装クラスから切り離すため。
分類:
-
シンプルファクトリモード(静的ファクトリ)は
、同じ階層構造で任意の製品を生成するために使用されます(新しい製品を追加するには、既存のコードを変更する必要があります)1.ファクトリクラスの静的メソッドが新しいオブジェクトを担当し、コンシューマは静的ファクトリの対応するメソッドを呼び出すだけで済みます。
-
ファクトリメソッドモード
は既存のクラスを変更せず、新しいファクトリクラスを追加することで拡張します。
ファクトリメソッドモードでは、構築された各タイプに対応するファクトリがあり、ファクトリが新しいオブジェクトを担当します。
オブジェクトが作成されるたびに、対応するタイプのnewのファクトリが必要です。次に、ファクトリ内の新しいオブジェクトを担当するメソッドを呼び出します。ファクトリメソッドモードでは、統一されたファクトリインターフェイスとオブジェクトインターフェイスが指定されます。作成するオブジェクトには、作成に役立つ対応するファクトリ(メソッド)が
あります。このタイプのファクトリを手動で作成し、のメソッドを呼び出す必要があります。工場; -
抽象ファクトリパターン
は製品を追加できませんが、製品ファミリを追加できます。
定義:抽象ファクトリパターンは、特定のクラスを指定せずに、一連の関連オブジェクトまたは相互依存オブジェクトを作成するためのインターフェイスを提供します。
3.ビルダーモード
- 定義:同じ構築プロセスで異なる表現を作成できるように、複雑なオブジェクトの構築をその表現から分離します
- 主な機能:ユーザーは、オブジェクトの構築プロセスや詳細を知らなくても、複雑なオブジェクトを直接作成できます。
- ユーザーは指定された複雑なオブジェクトのタイプとコンテンツを指定するだけでよく、ビルダーモードは複雑なオブジェクトを順番に作成する責任があります(内部の構築プロセスと詳細を非表示にします)
4.プロトタイプモード
5.アダプタモード
- 効果: