SlideShare a Scribd company logo
1 of 55
Download to read offline
GoFデザインパターン
構造に関するパターンについて
・Adapterパターン
・Compositeパターン
1.Adapter パターン
インターフェースに後付で使いたい機能を追加する
・既に提供されている処理を、変換して再利用
する
・クラス間の違いを吸収して、互換性の無いクラ
スを組み合わせることが出来る
・継承と委譲によって、処理を変換する
特徴
・サンプルソース/継承を利用する
継承(is a 関係)を利用した方法の図
登場人物:Client …Adapterを生成して処理を呼び出す
Target …処理を持っている
Adapter …Adapteeを継承し、Targetを実装している
Adaptee …具体的な処理内容を持っている
■ソースコード例
・Clientクラス
public class Client {
public static void main(String[] args){
Target target = new Adapter(); ←Adapterインスタンスを生成
target.targetMethod1(); ←Adapteeクラスの処理の呼び出し
target.targetMethod2(); ←同上
}
}
・Targetインターフェース
public interface Target {
public abstract void targetMethod1(); ←呼び出すための抽象メソッド
public abstract void targetMethod2();
}
■ソースコード例
・Adapterクラス
public class Adapter extends Adaptee implements Target {
public void targetMethod1(){
method1(); ←Adapteeクラスのメソッドの呼び出し
}
public void targetMethod2(){
method2(); ←同上
}
}
・Adapteeクラス
public class Adaptee {
public void method1(){ ←実際の処理を行うメソッド
System.out.println(“method1”); ←実際の処理
}
public void method2(){
System.out.println("method2");
}
}
・サンプルソース/委譲を利用する
委譲(has a 関係)を利用した方法の図
登場人物:Client …Adapterを生成して処理を呼び出す
Target …処理を持っている
Adapter …Adapteeをフィールド変数に持ち、コンストラクタで
Adapteeインスタンスを生成している
Adaptee …具体的な処理内容を持っている
■ソースコード例
・Clientクラス
public class Client {
public static void main(String[] args){
Target target = new Adapter(); ←Adapterインスタンスを生成
target.targetMethod1();
target.targetMethod2();
}
}
・Targetクラス
public abstract class Target { ←処理を呼び出すための抽象クラス
public abstract void targetMethod1();
public abstract void targetMethod2();
}
■ソースコード例
・Adapterクラス
public class Adapter extends Target {
private Adaptee adaptee; ←Adapteeをフィールド変数として宣言
public Adapter(){
this.adaptee = new Adaptee(); ←Adapteeインスタンスを生成
}
public void targetMethod1(){
adaptee.method1(); ←Adapteeインスタンスから処理の呼び出し
}
public void targetMethod2(){
adaptee.method2(); ←同上
}
}
・Adapteeクラス
public class Adaptee {
public void method1(){
System.out.println("method1");
}
public void method2(){
System.out.println("method2");
}
}
●別のクラスの処理を足す例
※※Adaptee2クラスと言う別のクラスの処理method3を足す場合、以下のように追加する※※
・Targetクラス
public abstract class Target {
public abstract void targetMethod1();
public abstract void targetMethod2();
public abstract void targetMethod3(); ←呼び出しの追加
}
・Adapterクラス
public class Adapter extends Target {
private Adaptee adaptee;
private Adaptee2 adaptee2; ←使われていなかったAdaptee2クラス変数の宣言
public Adapter(){
this.adaptee = new Adaptee();
this.adaptee2 = new Adaptee2(); ←Adaptee2インスタンスを生成
}
public void targetMethod1(){
adaptee.method1();
}
…
public void targetMethod3(){
adaptee2.method3(); ←Adaptee2クラスのメソッド呼び出し
}
}
・追加クラス Adaptee2
・Adaptee2クラス
public class Adaptee2 {
public void method3(){
System.out.println(“method3”); ←Adapteeクラスには無かった処理
}
}
■結果、Clientクラスは呼び出すだけで内容には関知しない
・Clientクラス
public class Client {
public static void main(String[] args){
Target target = new Adapter();
target.targetMethod1();
target.targetMethod2();
target.targetMethod3(); ←別クラスのメソッド呼び出しの追加
}
}
■Adapterパターンの利点
・別クラスの処理を足す例では、Adapteeクラスにも、Aaptee2クラスにも変更を加え
ることなく、method3メソッドを利用出来ました。
・実装するにあたって新規に製造するのではなくて、すでに使われている実績のある
クラスを利用することで、調べなければならない箇所(テストをしなければならない
箇所)を減らすことが出来ます。
2.Composite パターン
(オブジェクトから見て)自身と子とで同じ機能を使えるようにする
特徴
・全体と部分で共通した処理を持っている
・オブジェクトとオブジェクトの集合を区別せず
に処理を行える(同一のメソッドが使える)
・共通するインターフェースを持つので、一部だ
けの処理の変更がし辛い
●全体と部分を区別せずに処理を行うと言うこと
例として、フォルダとファイルの関係が挙げられます。
【フォルダに入れる】という処理は、フォルダ自身に対しても、ファイルに対しても
行うことが出来ます。
以下の例図で、AフォルダはA自身を削除することも、Bを削除することも可能で
す。 また、A以下の階層に入っているBフォルダ、Cフォルダも同様です。
末端のファイルも、自身を削除できます。
登場人物:Component …CompositeとLeafに同一の処理を用意する
Composite …フォルダの役割。自身とファイルを子に出来る
Leaf …ファイルの役割。子を持てない
・サンプルソース/全体と部分の共通処理
■ソースコード例
・Componentクラス
public abstract class Component {
public abstract String getName(); ←呼び出す処理を用意しておく
public Component add(Component component) throws FileTreatmentException {
throw new FileTreatmentException(); ←Componentの追加
}
public Component remove(Component component);
}
}
・Leafクラス
public class Leaf extends Component {
private String name;
private int size;
public Leaf(String name, int size) { ←コンストラクタ
this.name = name;
this.size = size;
}
}
■ソースコード例
・Compositeクラス
public class Composite extends Component {
private String name;
private ArrayList composite = new ArrayList();
public Composite(String name) { ←コンストラクタ
this.name = name;
}
public String getName() { ←Leafと共通している処理
return name;
}
public Component remove(Component component) {
composite.remove(component);
}
}
■Compositeパターンの利点
・複数と単数の同一視
同じ抽象クラスであるComponentを継承することで、CompositeとLeafを
区別することなくCompositeへ格納することが可能となりました。
Compositeへ格納されているのがどちらであろうと、共通の処理である
removeで取り除くことが可能となっています。
難点としては、新しい機能をComponentを通して実装する際、Leafにも
影響が出てしまうところです。
この例ではLeafにはadd出来ないので例外処理を行っていますが、
後になって新しい機能を増やそうとするほど影響が大きくなってしまいま
す。
これを避けるために、Compositeパターンを利用する際には、最初から
求められる機能を考慮することが必要になります。
Abstract Factory
関連する部品をまとめて作る工場
はじめに
「abstract factory」を直訳すると「抽象的な工場」となります。抽象的な工場・・・これは一体何な
のでしょうか?
GoFパターンの一つにFactory Methodパターンがあります。Factory Methodパターンは
製品であるオブジェクトを作る「工場」を用意するパターンです。ここで見ていくAbstract Factory
パターンも同様にオブジェクトを生成するパターンの1つで、関連し合うオブジェクトの集まり、つまり
部品の集まりを生成します。
ここで、「抽象的な」というところがポイントです。この工場は「抽象的」な工場で、生成される部品も
「抽象的」なものになります。
オブジェクト指向プログラミングでは、「物を抽象化する」ということが重要なポイントとなります。つ
まり、具体的な物を直接扱うのではなく、「具体的な物を抽象化した物」を扱うということです。
Abstract Factoryパターンは、具体的なクラスを明確にすることなく、関連し合うオブジェクトの
集まりを生成するパターンです
Abstract Factoryのクラス図
役割り
 1. AbstractProduct1・2・3(抽象的な製品)
 「AbstractFactory」(抽象的な工場)によって生成される抽象的なオブジェクト(部品・製品)のインタフェー
スを定義します。
 2. ConcreteProductA1・A2・A3、ConcreteProductB1・B2・B3(具体的な製品)
 「AbstractProduct1・2・3」のインタフェースを実装します。
 3. AbstractFactory(抽象的な工場)
 「AbstractProduct1・2・3」を生成するためのインタフェースを定義します。
※Factoryオブジェクト「ConcreteFactoryA」「ConcreteFactoryB」(具体的な工場)を生成するための
クラスメソッドを定義します。
 4. ConcreteFactoryA・ConcreteFactoryB(具体的な工場)
 「AbstractFactory」のインタフェースを実装します。
 5. Client(利用者)
 「AbstractProduct1・2・3」「AbstractFactory」が提供するインタフェースのみを使用して処理を行いま
す。
AbstractProduct1.java
public abstract class AbstractProduct1 {
protected String name;
public AbstractProduct1(String name) {
this.name = name;
}
public abstract void execute();
}
AbstractProduct2.java
public abstract class AbstractProduct2 {
protected String name;
public AbstractProduct2(String name) {
this.name = name;
}
public abstract void run();
}
AbstractProduct3.java
public abstract class AbstractProduct3 {
protected String name;
public AbstractProduct3(String name) {
this.name = name;
}
public abstract void action();
}
ConcreteProductA1.java
public class ConcreteProductA1 extends AbstractProduct1 {
public ConcreteProductA1(String name) {
super(name);
}
public void execute() {
System.out.println(name + " 完成(A1-execute)!");
}
}
ConcreteProductA2.java
public class ConcreteProductA2 extends AbstractProduct2 {
public ConcreteProductA2(String name) {
super(name);
}
public void run() {
System.out.println(name + " 完成(A2-run)!");
}
}
ConcreteProductA3.java
public class ConcreteProductA3 extends AbstractProduct3 {
public ConcreteProductA3(String name) {
super(name);
}
public void action() {
System.out.println(name + " 完成(A3-action)!");
}
}
ConcreteProductB1.java
public class ConcreteProductB1 extends AbstractProduct1 {
public ConcreteProductB1(String name) {
super(name);
}
public void execute() {
System.out.println(name + " 完成(B1-execute)!");
}
}
ConcreteProductB2.java
public class ConcreteProductB2 extends AbstractProduct2 {
public ConcreteProductB2(String name) {
super(name);
}
public void run() {
System.out.println(name + " 完成(B2-run)!");
}
}
ConcreteProductB3.java
public class ConcreteProductB3 extends AbstractProduct3 {
public ConcreteProductB3(String name) {
super(name);
}
public void action() {
System.out.println(name + " 完成(B3-action)!");
}
}
AbstractFactory.java
public abstract class AbstractFactory {
public static AbstractFactory createFactory(int factoryId){
switch(factoryId){
case ConcreteFactoryA.id:
return new ConcreteFactoryA();
case ConcreteFactoryB.id:
return new ConcreteFactoryB();
default:
return null;
}
}
public abstract AbstractProduct1 createProduct1();
public abstract AbstractProduct2 createProduct2();
public abstract AbstractProduct3 createProduct3();
}
ConcreteFactoryA.java
public class ConcreteFactoryA extends AbstractFactory {
public static final int id = 1;
public AbstractProduct1 createProduct1() {
return new ConcreteProductA1("工場A - 製品1");
}
public AbstractProduct2 createProduct2() {
return new ConcreteProductA2("工場A - 製品2");
}
public AbstractProduct3 createProduct3() {
return new ConcreteProductA3("工場A - 製品3");
}
}
ConcreteFactoryB.java
public class ConcreteFactoryB extends AbstractFactory {
public static final int id = 2;
public AbstractProduct1 createProduct1() {
return new ConcreteProductB1("工場B - 製品1");
}
public AbstractProduct2 createProduct2() {
return new ConcreteProductB2("工場B - 製品2");
}
public AbstractProduct3 createProduct3() {
return new ConcreteProductB3("工場B - 製品3");
}
}
Client.java
public class Client {
public static void main(String[] args) {
List<AbstractFactory> factorys =
new ArrayList<AbstractFactory>();
factorys.add(AbstractFactory.createFactory(ConcreteFactoryA.id));
factorys.add(AbstractFactory.createFactory(ConcreteFactoryB.id));
Iterator<AbstractFactory> it = factorys.iterator();
while (it.hasNext()){
AbstractFactory factory = it.next();
AbstractProduct1 product1 = factory.createProduct1();
AbstractProduct2 product2 = factory.createProduct2();
AbstractProduct3 product3 = factory.createProduct3();
product1.execute();
product2.run();
product3.action();
}
}
}
実行結果
C:¥sample¥desin_pattern¥abstract_factory>javac Client.java [Enter]
C:¥sample¥desin_pattern¥abstract_factory>java Client [Enter]
工場A - 製品1 完成(A1-execute)!
工場A - 製品2 完成(A2-run)!
工場A - 製品3 完成(A3-action)!
工場B - 製品1 完成(B1-execute)!
工場B - 製品2 完成(B2-run)!
工場B - 製品3 完成(B3-action)!
Abstract Factoryパターン とは
Abstract Factoryパターンでは、部品の役割を持つクラスとその部品を作る工
場の役割を持つクラスが存在します。
ただし、その工場には関連し合う部品を生成するためのメソッドがそれぞれ用意
されます。また、関連し合う部品群の種類に応じて、その工場自身も「工場を生成
するための工場」によって生成されます。
これにより、状況に応じて生成される具体的な部品群を切り替えることができま
す。
まとめると、Abstract Factoryパターンでは工場から生成される部品は抽象化
されており、部品の具体的な内容や生成手順をクライアントが意識しなくて済むよ
うになります。
Abstract Factoryパターンの目的
 互いに関連したり依存し合うオブジェクト群を、その具象クラスを明確
にせずに 生成するためのインターフェースを提供する。
Abstract Factoryパターンのメリット
 具体的なクラスをクライアントから隠蔽する
 クライアントは具体的な工場や部品に直接アクセスするのではなく、抽象化され
た工場や部品のAPIのみを使って部品オブジェクトを生成したりアクセスしたり
できます。このため、クライアントを変更することなく、具体的な工場や部品を変
更することが可能です。
 利用する部品群の整合性を保つ
 関連し合うオブジェクトを扱う場合、その整合性を保つことが重要になります。
Abstract Factoryパターンを適用することで、オブジェクト群の整合性を容易
に保つことができます。
Abstract Factoryパターンのメリット
 部品群の単位で切り替えができる
 ConcreteFactoryクラスは関連する部品の集まりを生成します。つまり、
ConcreteFactoryクラスを切り替えることで、関連する部品の集まりを容易に
切り替えることができます。
Factory Method との違い
 「Factory Method」パターンは、『オブジェクト生成』の抽象化にポイ
ントを置いたパターンであるのに対し、「Abstract Factory」パターン
は、『関連するオブジェクト郡をまとめて生成するための手順』の抽象
化にある。
Visitorパターン
構造を渡り歩きながら仕事をする
○Visitor パターンとは
・「Visitor」という英単語は、「訪問者」を意味する。
このパターンは、「データ構造」と「それに対する処理」を分離することを目的とする
パターンです。
そのためこのパターンを適用すると、「データ構造」を変更することなしに、
「新しい処理」を追加することができる。
・具体的には、訪問者であるVisitor役のオブジェクトが、訪問先であるデータ構造要素
の個々のオブジェクトを訪問し、その訪問先の公開されている資源を利用して処理を
実行して回るという形になる。
○Visitor パターンの構造
処理の部分
データ構造の部分
○サンプルソース1
 ObjectStructure.java
○サンプルソース2
 Element.java
○サンプルソース3
 ConcreteElementA.java
○サンプルソース4
 ConcreteElementB.java
○サンプルソース5
 Visitor.java
○サンプルソース6
 ConcreteVisitor1.java
○サンプルソース7
 ConcreteVisitor2.java
○サンプルソース8
 StartClass.java
○Visitor パターンのメリット
1.データ構造と操作を分離することにより、クラスの構造を簡素化する
ことが可能。
2.データ構造のクラスを変更することなく、操作側の機能を
容易に拡張できる。
○Visitor パターンのデメリット
1.Visitor未使用時(普通のデータとそれに対する処理が纏まったクラス)と比べて、コードが
複雑になる。
2.訪問者側に処理を追加するのは容易だが、データ構造側に処理を追加する場合に、
訪問者の受け入れを常に考慮する必要がでてくる。
3.訪問者に処理を行ってもらうには必要な情報を公開しなければならないが、必要以上に情報を
公開してしまうとデータの隠ぺいが崩れたり、データ構造の改良が難しくなる。

More Related Content

What's hot

Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動Shinichi Kozake
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm伸男 伊藤
 
xUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency InjectionxUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency InjectionTakuto Wada
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~Fujio Kojima
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode ContractsYoshifumi Kawai
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Keisuke Fukuda
 
Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析Mr. Vengineer
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うTatsumi Naganuma
 
XunitとMoq 公開用
XunitとMoq 公開用XunitとMoq 公開用
XunitとMoq 公開用ESM SEC
 
Roslyn による Visual Studio のアドイン
Roslyn による Visual Studio のアドインRoslyn による Visual Studio のアドイン
Roslyn による Visual Studio のアドインFujio Kojima
 

What's hot (20)

More C++11
More C++11More C++11
More C++11
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
Xtend30分クッキング やきに駆動
Xtend30分クッキング   やきに駆動Xtend30分クッキング   やきに駆動
Xtend30分クッキング やきに駆動
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
 
CLRH_120414_WFTDD
CLRH_120414_WFTDDCLRH_120414_WFTDD
CLRH_120414_WFTDD
 
xUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency InjectionxUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency Injection
 
Improvement future api
Improvement future apiImprovement future api
Improvement future api
 
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
C#の新機能勉強会 ~ C#7、8の新機能を活用して速く安全なプログラムを書こう~
 
Junit4
Junit4Junit4
Junit4
 
基礎からのCode Contracts
基礎からのCode Contracts基礎からのCode Contracts
基礎からのCode Contracts
 
T93 com入門
T93 com入門T93 com入門
T93 com入門
 
Mvpvm pattern
Mvpvm patternMvpvm pattern
Mvpvm pattern
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12Effective modern C++ 勉強会 #3 Item 12
Effective modern C++ 勉強会 #3 Item 12
 
Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析Cloud TPU Driver API ソースコード解析
Cloud TPU Driver API ソースコード解析
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
Xtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使うXtend - Javaの未来を今すぐ使う
Xtend - Javaの未来を今すぐ使う
 
XunitとMoq 公開用
XunitとMoq 公開用XunitとMoq 公開用
XunitとMoq 公開用
 
Roslyn による Visual Studio のアドイン
Roslyn による Visual Studio のアドインRoslyn による Visual Studio のアドイン
Roslyn による Visual Studio のアドイン
 

Similar to 第2回デザインパターン資料

GoF デザインパターン 2009
GoF デザインパターン 2009GoF デザインパターン 2009
GoF デザインパターン 2009miwarin
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてkimukou_26 Kimukou
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)Fujio Kojima
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravelRisa Ohnishi
 
Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説JPCERT Coordination Center
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_publicKazuaki Ishizaki
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handsonNobuhiro Sue
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!Shohei Okada
 
cloud_firestore_schema_code_generation_for_flutter.pdf
cloud_firestore_schema_code_generation_for_flutter.pdfcloud_firestore_schema_code_generation_for_flutter.pdf
cloud_firestore_schema_code_generation_for_flutter.pdfKosuke Saigusa
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxNobuhiro Sue
 

Similar to 第2回デザインパターン資料 (20)

GoF デザインパターン 2009
GoF デザインパターン 2009GoF デザインパターン 2009
GoF デザインパターン 2009
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
 
Spring AMQP × RabbitMQ
Spring AMQP × RabbitMQSpring AMQP × RabbitMQ
Spring AMQP × RabbitMQ
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)「Windows 8 ストア アプリ開発 tips」  hokuriku.net vol.11 (2013年1月26日)
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
Rakuten tech conf
Rakuten tech confRakuten tech conf
Rakuten tech conf
 
Best practice laravel
Best practice laravelBest practice laravel
Best practice laravel
 
Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説
 
20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public20171212 titech lecture_ishizaki_public
20171212 titech lecture_ishizaki_public
 
Project lambda
Project lambdaProject lambda
Project lambda
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
C#6.0の新機能紹介
C#6.0の新機能紹介C#6.0の新機能紹介
C#6.0の新機能紹介
 
cloud_firestore_schema_code_generation_for_flutter.pdf
cloud_firestore_schema_code_generation_for_flutter.pdfcloud_firestore_schema_code_generation_for_flutter.pdf
cloud_firestore_schema_code_generation_for_flutter.pdf
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
 

More from gaaupp

Spring勉強会2
Spring勉強会2Spring勉強会2
Spring勉強会2gaaupp
 
Spring勉強会
Spring勉強会Spring勉強会
Spring勉強会gaaupp
 
勉強会場所候補
勉強会場所候補勉強会場所候補
勉強会場所候補gaaupp
 
デザインパターン問題
デザインパターン問題デザインパターン問題
デザインパターン問題gaaupp
 
デザインパターン
デザインパターンデザインパターン
デザインパターンgaaupp
 

More from gaaupp (6)

Spring勉強会2
Spring勉強会2Spring勉強会2
Spring勉強会2
 
Spring勉強会
Spring勉強会Spring勉強会
Spring勉強会
 
a
aa
a
 
勉強会場所候補
勉強会場所候補勉強会場所候補
勉強会場所候補
 
デザインパターン問題
デザインパターン問題デザインパターン問題
デザインパターン問題
 
デザインパターン
デザインパターンデザインパターン
デザインパターン
 

第2回デザインパターン資料