16
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

なぜデザインパターンは必要か

Last updated at Posted at 2018-01-12

最初に

デザインパターンの内容を詳しく紹介する記事ではありません。
なるほど、覚えておきたい!というモチベーションをアップさせるための記事です。

対象

動くプログラムを書ける人。
でもオブジェクト指向を活用した書き方はできてない人。

デザインパターン例(Adapter パターン)

そもそもデザインパターンとは、をAdapterパターンで紹介します。

もともと下記のクラスがありました。

Adaptee.java
public class Adaptee{
    public void method1(){
	 System.out.println("method1");
    }

    public void method2(){
	 System.out.println("method2");
    }
}

ここで、method1()、method2()と同じ機能をnewMethod1()、newMethod2()
をインタフェースとして実装してほしい、と言われたとします。
デザインパターンを知らないでこの要求があった場合、
Adapteeクラス内に実装しようとするのではないでしょうか。
それをAdapterパターンに即すと下記のようになります。

まず要求インタフェース(メソッド)が定義されたを含む下記クラスを作成します。

Target.java
public interface Target{
    public abstract void newMethod1();
    public abstract void newMethod2();
}

それからTarget.javaとAdaptee.javaを取り込んだ下記クラスを作成します。

Target.java
public class Adapter extends Adaptee implements Target{
    public void newMethod1(){
	 method1();
    }

    public void newMethod2(){
	 method2();
    }
}

使うときは下記です。

Client.java
public class Client{
    public static void main(String[] args){
	Target target = new Adapter();
	target.newMethod1();
	target.newMethod2();
    }
}

こんな感じで、こうゆうときはこうゆう風に書く!という定石集的なものがデザインパターンです。

メリット

・プログラムを組むときの方針がわかる
パターンが自分の中にあれば、それが適応できるプログラムに出会ったとき1から作るより遥かに楽です。
また、パターンを丸暗記する必要もなく、概要だけ把握し、そのパターンに出会ったときに読み返せばよいのです。

・他者のコードの意図が読めるようになる
自分が作る際だけでなく、他の人のコードを読んだときに「あ、これはあのパターン」と思えるようになります。
そしてそう思えるということは、コードの意図も読み取れるということです。

参考にしたサイト

参考にした本

増補改訂版Java言語で学ぶデザインパターン入門
デザインパターンといえばこれ、という本です。

16
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?