下部連結関係より組み合わせまたは集約関係継承関係に起因する「合成多重原理」を満たすために、構造モデルは、クラス構造スキーマよりも大きな柔軟性を有する物体。
:構造モデルは、7つのタイプに分類される
オブジェクトへのアクセスを制御するための薬剤を提供することを目的:プロキシ(プロキシ)モード。すなわち、間接的にプロキシクライアントを経由して、オブジェクトにアクセスすることにより、制限、オブジェクトの一部の機能を強化または変更します。
アダプタ(アダプタ)モード:クライアントは、互換性のないインターフェースに起因するもののような他のインターフェースが、そうでなければ作業と一緒に働くことができない基づいて期待クラスインターフェースを変換。
橋(ブリッジ)モード:抽象化と分離、それらは独立して変えることができるようになっています。その代わりに、継承の組み合わせの関係によって達成され、抽象化は、カップリングの二つの可変程度の大きさを低減するために実装されています。
デコレーション(デコ)モード:動的に余分な機能を高めるために、あるオブジェクトにいくつかの責任を追加します。
外観(ファサード)モード:複数の複雑なサブシステムに一貫性のあるインターフェースを提供し、これらのサブシステムは、より簡単にアクセスできます。
フライ級(フライ級)モード:使用の共有が有効利用にきめ細かいオブジェクトの多くをサポートします。
(コンポジット)モードの組合せは、ユーザがオブジェクトと個々のオブジェクトの同一の組み合わせへのアクセスを有するように、階層ツリーにオブジェクト。
プロキシモード
- 該当シーン
- 、オブジェクトへのアクセスを制御するための剤を提供それによって制限、オブジェクトのいくつかの機能を向上または変更するオブジェクト
- AOP
- 一般的な構造
- 抽象テーマ:インターフェースや抽象クラス宣言と真のテーマ代理オブジェクトによって実装されたビジネス・メソッド
- レアルテーマ:抽象メソッドは、特定のトピックを達成するために
- エージェント:本当のテーマに対して同じインタフェースを提供し、内部クラスのテーマは本当の参照を持って、彼は、アクセス制御、または関数の本当のテーマを拡張することができます
- コードの実装
public class proxy_test {
public static void main(String[] args) {
proxy proxy=new proxy();
proxy.getshow();
}
}
interface title{
void show();
}
class T_title implements title{
@Override
public void show() {
System.out.println("具体主题");
}
}
class proxy{
T_title t_title;
void getshow(){
if(t_title==null){
t_title=new T_title();
}
pre();
t_title.show();
after();
}
//操作之前
void pre(){
System.out.println("前");
}
//操作之后
void after(){
System.out.println("后");
}
}
アダプタモード
- 該当するシーン:
- 別のインターフェイスクライアントにクラスのインターフェイスの変換は、そうでなければため、互換性のないインターフェースのこれらのクラスが一緒に作業するために一緒に働くことができないことを期待します。
- クラスの存在は、以前に新システムの機能要件を満たすためにシステムを開発し、そのインターフェースは、新しいシステム・インターフェースと矛盾します
- サードパーティのコンポーネント、異なるコンポーネント・インタフェースの使用は、それらの要件およびインタフェース定義を定義します
- 一般的な構造
- 宛先インターフェイスは:インターフェイスにサービスを提供することができ、このシステムは、抽象クラスやインタフェースであってもよいです
- カテゴリフィッター:既存のコンポーネントライブラリにアクセスするように適合され、コンポーネントのインタフェースです。(現在のクラスによって呼び出される直接使用することはできません)
- クラスアダプタ:コンバータとして、によって継承または言及オブジェクトアダプタ人、アダプタインタフェースは、ターゲット・インタフェースに変換しました顧客がターゲット・インタフェースによるアダプタのフォーマットへのアクセスを許可するには。
- コードの実装
- クラスアダプタ(継承によって)
public class adapter_test {
public static void main(String[] args) {
adapter adapter=new adapter();
adapter.request();
}
}
//目标类
interface target{
void request();
}
//适配者类
class adaptee{
void show(){
System.out.println("调用适配者类");
}
}
//适配器类
class adapter extends adaptee implements target{
@Override
public void request() {
show();
}
}
- オブジェクトアダプタ(参照することによって実現されます)
class ObjectAdapter implements Target
{
private Adaptee adaptee;
public ObjectAdapter(Adaptee adaptee)
{
this.adaptee=adaptee;
}
public void request()
{
adaptee.show();
}
}
ブリッジモード
-
定義:彼らは独立して変化することができるように、抽象的と分離
-
実装コード
//实现化角色:颜色
interface Color
{
String getColor();
}
//具体实现化角色:黄色
class Yellow implements Color
{
public String getColor()
{
return "yellow";
}
}
//具体实现化角色:红色
class Red implements Color
{
public String getColor()
{
return "red";
}
}
//抽象化角色:包
abstract class Bag
{
protected Color color;
public void setColor(Color color)
{
this.color=color;
}
public abstract String getName();
}
//扩展抽象化角色:挎包
class HandBag extends Bag
{
public String getName()
{
return color.getColor()+"HandBag";
}
}
//扩展抽象化角色:钱包
class Wallet extends Bag
{
public String getName()
{
return color.getColor()+"Wallet";
}
}
装飾的なパターン
-
定義:既存の構造を変更せずにオブジェクトが、動的オブジェクトに機能を追加する場合。
-
利点:
- 継承よりも柔軟性
- あなたは行動の異なる組み合わせの数を作成し、異なる装飾コンクリートの数を設計することができます
- 短所:
- あまりにも多くのサブクラスを追加します。
- 利用シナリオ
- 既存のカテゴリに追加機能を追加することが望まれるが、この方法は、サブクラスを生成するように拡張することができるとき。例えば、クラスが隠されているか、クラスが究極のクラスがある場合、または継承を使用すると、サブカテゴリーの多くを生成します。
- 継承を使用して、順列と組み合わせの基本的な機能のセットを介して既存の機能の多くを生成することが望まれるとき、達成することは困難であり、モデルは非常に良い達成飾られています。
- オブジェクトが動的機能要件を追加することができるとき、それは、次いで、動的に引き出されてもよいです。
- 一般的な構造: