インタビューでよく聞かれるデザインパターン
デザインパターンとは何ですか?
デザインパターンは、特定のデザイン問題を解決するために世界中のさまざまなプログラマーが使用する試みとテスト方法です。デザインパターンは、コードの可用性の拡張です
シングルトンモード
一度作成されることが保証され、システムのオーバーヘッドを節約します
空腹の中国風:オブジェクトの有無に関係なく、新しいオブジェクトを直接作成する必要があります。
レイジーマンスタイル:最初にオブジェクトが作成されているかどうかを確認します。オブジェクトが作成されている場合は、最初に作成されたオブジェクトを使用し、作成されていない場合は、新しいオブジェクトを作成します。
1)シングルトンモードは、システム全体で作成されたときに、より多くのリソースを消費するいくつかのオブジェクトの共有に焦点を当てています。アプリケーション全体で維持される特定のクラスインスタンスは1つだけであり、すべてのコンポーネントで使用されます。Java.lang.Runtime
これは、シングルトンパターンの典型的な例です。Java 5以降、使用できます列挙(列挙型)スレッドセーフなシングルトンを実現します。(テストによると、列挙型の使用はシングルトンモードを作成するための最も完璧な方法です)
オブザーバーモード
オブジェクト間の1対多の依存関係を定義します。これにより、オブジェクトが変更されると、そのすべての依存関係が通知され、自動的に更新されます。
1)オブザーバーモードは、オブジェクトの状態変化とオブザーバーの通信に基づいているため、オブザーバーは対応する操作を行うことができます。簡単な例は気象システムです。気象が変化すると、それを一般に表示されるビューに反映する必要があります。このビューオブジェクトはサブジェクトであり、さまざまなビューはオブザーバーです。
2)Ma Junjun先生が泣いている子供の例。何人かのオブザーバー(父、母、子犬)が子供を観察します。子供が泣き始めると、さまざまな観察者がさまざまな方法で反応します。父親は子供に粉ミルクを与えます。母親は子供を抱きしめ、子犬は吠えました。
工場モード
デカップリングコード。
1)ファクトリパターンの最大の利点は、オブジェクトを作成するときにパッケージレベルを上げることです。ファクトリを使用してオブジェクトを作成する場合は、後で、呼び出しレベルで変更を加えることなく、元の製品実装またはクラスをより高度で高性能な実装に置き換えることができます。
2)以下は通常の工場の例です。
1.パブリックインターフェイスを作成します
/**
* 公共的发送接口
*/
public interface Sender {
public void send();
}
2.2つの実装クラスを作成します
/**
* 通过QQ发送
*/
public class sendQQ implements Sender {
@Override
public void send() {
System.out.println("使用QQ开始发送消息...");
}
}
/**
1. 通过微信发送
*/
public class sendWeChat implements Sender {
@Override
public void send() {
System.out.println("使用微信开始发消息...");
}
}
- 工場を作る
/**
1. 发送信息工厂
*/
public class SendFactory {
public Sender produce(String type){
if("QQ".equals(type)){
return new sendQQ();
}else if ("WeChat".equals(type)){
return new sendWeChat();
}else{
System.out.println("输入类型有误!");
return null;
}
}
}
- 工場テストを使用する
public class FactoryTest {
public static void main(String[] args) {
SendFactory sendFactory = new SendFactory();
Sender qq = sendFactory.produce("WeChat");
qq.send();
}
}
ファクトリパターン分類
1)シンプルファクトリー:同じグレード構造の製品を製造するために使用され、新しい製品を追加するためにできることは何もありません。
2)ファクトリメソッド:同じ階層構造で固定製品を生成し、任意の製品の追加をサポートするために使用されます。
3)Abstract Factory:さまざまな製品ファミリのすべての製品を生成するために使用され、新しい製品を追加することはできません。製品ファミリの追加をサポートします。
デコレータパターン
デコレーションモードは、単一のオブジェクトの能力を向上させます。デコレーションパターンは、Java IOのあらゆる場所で使用されます。典型的な例は、BufferedReader
やなどのBufferedシリーズのクラスBufferedWriter
です。これらはReader
andWriter
オブジェクトを拡張して、パフォーマンスを向上させるバッファレベルの読み取りと書き込みを実現します。
参照元:https://zhuanlan.zhihu.com/p/94767927
つづく...