「ある日の知識、」簡潔かつデザインパターンインタビューのトピック

はじめに:

デザインパターンの分類

三つのカテゴリーにデザインパターン

生成に関するデザインパターン
シングルトンに関連して、オブジェクトの作成、Factory Methodパターン、Abstract Factoryパターン、Builderパターン、プロトタイプモデルを含みます

構造設計パターン
構造設計パターンがアダプタモード、プロキシモード、装飾的なパターン、外観モード、ブリッジモード、及び組合せパターンフライ級を含むプログラムの構造からモジュール間の結合の問題を解決することです

行動のデザインパターンは、
どのように主要なクラスやオブジェクトが相互作用に対処するとどのように戦略的なモデル、テンプレートメソッドパターン、Observerパターン、反復モード、責任のチェーン・モード、コマンドモード、メモモード状態モード、ビジターパターン、仲介を含め、責任を割り当てますモード、パーサモード

「ある日の知識、」簡潔かつデザインパターンインタビューのトピック

デザインパターンの6つの原則

単一責任の原則:理由はクラスで、それが変更唯一の原因である必要があります
あまりにも多くの責任を回避するために、一つのことを行うためのクラスを。例えば、このような状況は、Beanファイルの両方での活動では、良くないように、私たちはいつでも変更する必要があることにつながったようにそこにHTTPリクエストだけでなく、アダプターとは、活性の変化につながりますそれによって引き起こされる多くの変更がある理由は、単一責任の原則に準拠していません。

オープンクローズ原理B:クラス、モジュール、機能を拡張することができるはずですが、変更することはできません
拡張のために開いており、修正のため閉鎖されています。可能な限り要求の変化に直面して、私たちのコードが変更に通じ対応するため、比較的安定した、スケーラブルな方法のままではなく、元のコードの実装を変更することができます

。リヒター置換原則C:そのサブクラスたときに、基本クラスを配置するすべての参照、オブジェクトは透明でなければならない
リヒター置換原則は、オープンクローズドの原則を達成するための一つの重要な方法ですが、私たちは、基本クラスを使用すると、使用できる場所を知っています達成するためのサブクラス、サブクラスのすべての実行時にベースクラス、オブジェクトを定義しようとするプログラムで使用される基本クラス型、決意サブクラス型を有しているからです。

d. 依赖倒置原则:高层模块不应该依赖于底层模块,两者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象
依赖倒置原则针对的是模块之间的依赖关系,高层模块指调用端,底层模块指具体的实现类,抽象指接口或抽象类,细节就是实现类。该原则的具体表现就是模块间的依赖通过抽象发生,直线类之间不发生直接依赖关系,依赖通过接口或抽象类产生,降低耦合,比如 MVP 模式下,View 层和 P 层通过接口产生依赖关系

e. 迪米特原则(最少知识原则):一个软件实体应该尽可能少的与其他实体发生相互作用
迪米特原则要求我们在设计系统时,尽量减少对象之间的交互

f. 接口隔离原则:一个类对另一个类的依赖应该建立在最小的接口上
接口隔离原则的关键是接口以及这个接口要小,如何小呢,也就是我们要为专门的类创建专门的接口,这个接口只对它有效,不要试图让一个接口包罗万象,要建立最小的依赖关系

1. 请列举出在 JDK 中几个常用的设计模式?

单例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如 Boolean,像 Boolean.valueOf,观察者模式(Observer pattern)被用于 Swing 和很多的事件监听中。装饰器设计模式(Decorator design pattern)被用于多个 Java IO 类中。

2. 什么是设计模式?你是否在你的代码里面使用过任 何设计模式?

设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方法。设计模式是代码可用性的延伸

3.Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式

单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。Java.lang.Runtime 是单例模式的经典例子。从 Java5 开始你可以使用枚举(enum)来实现线程安全的单例。

4. 在 Java 中,什么叫观察者设计模式(observer design pattern )?

观察者模式是基于对象的状态变化和观察者的通讯,以便他们作出相应的操作。简单的例
子就是一个天气系统,当天气变化时必须在展示给公众的视图中进行反映。这个视图对象是一个主体,而不同的视图是观察者。

5. 使用工厂模式最主要的好处是什么?在哪里使用?

工厂模式的最大好处是增加了创建对象时的封装层次。如果你使用工厂来创建对象,之后你可以使用更高级和更高性能的实现来替换原始的产品实现或类,这不需要在调用层做任何修改。

6. 举一个用 Java 实现的装饰模式(decorator design pattern) ?它是作用于对象层次还是类层次?

装饰模式增加强了单个对象的能力。Java IO 到处都使用了装饰模式,典型例子就是Buffered 系列类如 BufferedReader 和BufferedWriter,它们增强了 Reader 和 Writer 对象,以实现提升性能的 Buffer 层次的读取和写入。

7. 在 Java 中,为什么不允许从静态方法中访问非静态变量?

Java 中不能从静态上下文访问非静态数据只是因为非静态变量是跟具体的对象实例关联的,而静态的却没有和任何实例关联。

8. 设计一个 ATM 机,请说出你的设计思路?

例えば、金融システムの設計は、それらはすべてどのような場合に動作することができる必要があることを知っている必要があります。停電やその他の状況かどうかは、ATMが正しい状態(業務)を維持する必要があり、その上のロック(施錠)、トランザクション(取引)、エラー条件(エラー条件)、境界条件(境界条件)と考えます。けれども
あなたは、特定のデザインを考えることはできませんが、あなたは、非機能要件を指摘するいくつかの質問をして、境界条件を考えることができれば、これらは非常に良いだろう。

Javaでは9.時に書き換えを使用するには、高負荷、?

あなたはクラスの異なる実装が同じことを行うためのさまざまな方法を持って表示された場合、それは別の入力ではなく、重い負荷の書き換え(上書き)と同じことをやっている(オーバーロードさ)、する必要があります。Javaでは、メソッドの異なるシグネチャのオーバーロードではなく、書き換えられました。

10図は、代わりにどのような状況下でのインターフェイスの抽象クラスを使用する傾向になりますか?

インターフェイスと抽象クラスは「インタフェースの実現ではなく、コーディング、」設計原理に従う、それはコードの柔軟性を高めることができます変化するニーズに適合させることができます。ここでは、この質問に答えることができますいくつかのポイントは以下のとおりです。

Javaでは、あなただけのクラスを継承することができますが、複数のインタフェースを実装することができます。あなたがクラスを継承したらだから、あなたは他のクラスを継承する機会を失うことになります。

インタフェースは、通常、子会社の行動を表すか、または記述するために使用される:Runnableを、クローン可能な、直列化など、あなたが行動を表現する抽象クラスを使用するときに、あなたが同時にRunnableをクラスとClonablesことはできません(注:これは、本明細書に意図されている場合を指し、抽象クラスの場合として実装Runnableを等)は、Javaで次の2つのクラスから継承することはできませんので、しかし、あなたは、インターフェイスを使用する場合、あなたのクラスが同時に異なる行動の番号を持つことができます。

需要の高いアプリケーションは、抽象クラスを使用する傾向がある時間の一部では、インタフェースよりも少し速くなります。

あなたが仕様のシリーズを行いたい場合は、クラスの継承階層内にあり、より良い同じ場所でエンコードすることができ、その後、抽象クラスは、より良い選択です。時々、抽象クラスとインタフェースは、インタフェース関数が定義され、一緒に使用することができ、デフォルトの実装は、抽象クラスで定義されています。

おすすめ

転載: blog.51cto.com/14541311/2446522