序文
私たちは今、デザインパターンの7つの設計原理を学んできました。ここでは、記事の特定の設計パターンシリーズに直接行くことになりました。
私たちがどのようなデザインパターンを学ぶ前に、しかし、我々は、UML図を見てする必要があります。その後のデザインパターンの記事なので他には何もダイアグラムをUMLするために多くの場所を使用してはなりません。あなたも、UMLダイアグラムを読んでいない場合は、その後、いくつかの困難があるだろう確かになることを学びます。
だから、ネクサスの章として、このセクションに、のは、見た目のUML図を見てみましょう。(もちろん、すでにUMLダイアグラムは、あなたがこのセクションをスキップすることができます場合)
入門
慣例により、我々はあなたがどのようなUMLダイアグラムを知ってみましょう。
ユースケース図、静的構造図、動的な振る舞い図何UML、多くの種類があります。
Javaプログラムの類人猿として、我々はあなたができる構造図のクラス図についてまたは静的最も懸念しているので、あなたはそれだけでこれらの単語を覚えておく必要があります:UMLダイアグラムは、さまざまなクラス間の関係で、記述するために使用されるインタフェース。
私たちは、UMLのクラス図の将来を含めるの下に使用されているのIntelliJ IDEAは、クラス図を表示するためのツールが付属して、各ソフトウェアの描画スタイルは少し異なるものになりますが、物事の核心は変更されません。
OK、私が降ります
クラス間の関係
クラスとクラス間の関係は、我々は次のように分けることができます。
そのため私たちはアイデアを使用している時間のほとんどは、UMLのサポートUML図(ショートカット:Ctrl + Altキー+シフト+ U)を生成するためのツールが付属しています。一般的なクラス図は、同じの線画が、重合と組み合わせ関係IDEAのUMLダイアグラムの関係は少し異なるが生成されるが、我々は、次に、ダウン見えます。
頼ります
もう一方の側であれば、クラスで使用されるように、その後、それらの間に依存関係。
依存関係は、他の関係5が含まれます。これは、最大の特別な関係です。
- 他のクラスで使用されます
- プロパティは、クラスのメンバーである場合
- 戻り値の型の場合
- パラメータタイプの方法は、受信されます
- に使用される方法
//手机类
public class CellPhone {
//手机可以玩游戏
public void playGames(){
System.out.println("play games");
}
}
//普通人
public class Person {
//买手机
public CellPhone buyCellPhone(){
return new CellPhone();
}
//买个手机玩游戏
public void play(){
CellPhone cellPhone = buyCellPhone();
cellPhone.playGames();
}
}
一般化
汎化が実際に継承され、彼は、依存関係の特殊な場合(適切なサブセット)です。
- 汎化は実際には継承され
- クラス継承クラスBならば、我々は汎化関係AとBがあることを言います
//Person代表人
public class Person {
}
//Man代表男人
public class Man extends Person{
}
実現
関係実際に実装されているBクラスは、彼が依存関係(サブセット)の特別な場合であり、インタフェースを実装します。
//Dao接口
public interface Dao {
}
//Dao实现
public class DaoImpl implements Dao {
}
関連、集約、合成
なぜ、これらの3つが一緒に?
3つのコードで同じ性能が、意味論上のいくつかの違いので。
1関連:
次のような複数の抵抗を持つクラスとクラスの関係との間のリンク、
“1”(表示有且仅有一个)
“0...”(表示0个或者多个)
“0,1”(表示0个或者一个)
“n...m”(表示n到 m个都可以)
“m...*”(表示至少m个)
2重合:
部分可以离开整体单独存在,举一个例子。学校类中有一个学生类。当我们创建一个学校类的时候,可能因为刚创办,还没有学生。所以学生类是可以不存在的。不影响学校类的创建。他是依赖关系的特例(真子集)。
3 组合:
整体和部分同生共死,部分脱离整体会变得毫无意义,强调同生共死的一致的生命周期。
例如学生类中的身份证证类。每个学生肯定都会有身份证。在学生类被实例化成功以后,身份证类也被实例化成功。学生类是不能脱离身份证类单独存在的。他是依赖关系的特例(真子集)。
//学校
public class School {
public List<Student> studnets;
}
//学生
public class Student {
private IdentityCard identityCard = new IdentityCard(); //组合关系,创建student的时候也创建了身份证
}
//身份证
public class IdentityCard {
private String id = UUID.randomUUID().toString();
}
一个学校有很多个学生,一个学生只有一个身份证。所以上面三个类的UML图如下:
首先我们来看实线箭头,箭头方向指的是依赖的方向。School箭头指向Student标注1 * 表示:一个学校有多个学生。
Student的实线箭头指向IdentityCard并且标注的是1 1表示:一个学生只有一个学校和一个身份证。
然后我们看菱形图。正常来说,聚合关系应该是空心的菱形图,组合关系才是实心的菱形图,但是IDEA的集成工具将聚合和依赖关系都以实心菱形图来表示。
按照标准的uml图来说,student和school之间应该是空心的菱形图。IdentityCard与Student才是实线的菱形图。
总结
虽然说idea的画法有点不同,为了他的便利性我们也忍了。就好比大肠的功能虽然很脏,但是为了它的美味我能仍受,并且享受它。
好了,UNL图就到这里了,我们前期铺垫了那么多,从下一节开始终于进入了主题,具体的设计模式系列。