BLOG

2020-12-14 テクニカル

デザインパターン入門

以前に縞次郎先生がやっていたけど興味があったので私もデザインパターン調べてみたよ。

 

どうも、畜産ペンギンです。

という訳でデサインパターンについてですが、何それ?って人もいると思うので

簡単に言うと、要は開発における

 

「設計のベストプラクティス」

 

です。

 

コーディングの設計する際にどういうクラス分けや機能分割したらいい感じ

なのかをパターン化したってイメージですかね。

 

なのでイケてる設計する為にちょっと私も調べてみよーってやってみました。

で、みてみたんだけど、ハッキリ言って

 

全然わからん。🤪

 

え、みんなこんなの普通に理解出来んの?

 

と絶望したのですが、難易度低めの何とか私が理解出来たのを

いくつか紹介していきますよ。

※誤字ったり多少の文法ミスは大目にみてね!

 


 

1.Singleton

 

まぁこれは有名ですね。

生成するインスタンスの数を1つに制限する、という物ですね。

まぁ例えば随時更新される鍵情報なんかを複数別インスタンスで保持したりすると

ややこしく間違えるから一つである事を保証したい、みたいな感じですかね。

 

例としてはこんな感じ。

Key.java

class Key {    
    private static Key key = new Key();    
    private Key() {
        System.out.println("Cretae Key");
    }    
    public static Key getKey() {
        return key;
    }
}


インスタンスの作成は外部からされないようにprivateにしておき、

getKey()メソッドで内部で作成したインスタンスを返すといった感じですね。

 

 


 

2.Bridge

 

えー、難易度がいきなり跳ね上がります。。。

ちょっと正直ここからもう全部説明していくのはめんどk

困難なので、興味ある方は自分で調べてみて下さい。

 

どういった物かというと、

「機能」を受け持つクラスと「実装」を受け持つクラスを分離し、独立して

機能追加を行う事を可能とした形です。

例としてはこんな感じ。

 

KinouA.java(機能クラスA)

public class KinouA{
    private Impl impl;

    public KinouA(Impl impl){
        this.impl= impl;
    }

    public void aMethod(){
        impl.jissouMethod();
    }
}
 

Impl.java(実装の定義クラス)

public abstract class Impl{
    public abstract void jissouMethod();
}

JissouA.java(実装クラスA)

public class JissouA extends Impl{
    public void jissouMethod(){
        System.out.println("実装メソッドAだぞ。");
    }
}

JissouB.java(実装クラスB)

public class JissouB extends Impl{
    public void jissouMethod(){
        System.out.println("実装メソッドBだぞ。");
    }
}

KinouB.java(機能クラスB※追加機能)

public class KinouB extends KinouA{

    public KinouB(Impl impl){
        super(impl);
    }

    public void bMethod(){
        System.out.println("機能Bメソッドだぞ。");
    }
}
 

Main.java(実行クラス)

public class Main{
    public static void main(String[] args){
	KinouB b1 = new KinouB(new JissouA());
        KinouB b2 = new KinouB(new JissouB());
	b1.aMethod();
        b2.aMethod();
	b2.bMethod();
    }
}

実行結果

実装メソッドだぞ。
実装メソッドだぞ。
機能Bメソッドだぞ。


と、こんな感じで既存のKinouA.java、Impl.java、JissouA.java、JissouB.javaに

影響を与える事無く機能Bを追加して機能Aの上位互換として使用する事が出来るといった形ですね。

 

 

さて、、、

もう1個位紹介したかったですが疲れt

長くなったので、今回はこれで終わりにします。

まぁ、そう簡単に引き出しは増やせないよねー。

さようなら。

The following two tabs change content below.

畜産ペンギン

主にネットワーク系、開発系を経験しているエンジニアです。 技術系を気まぐれに書いて来たけどそれ以外も気まぐれに書いていこうかなぁと。