Memento

どこかでインスタンスのスナップショットを取っておき、いざというときにその状態を復元するような仕組みをMementoパターンという。18.Memento パターン | TECHSCORE(テックスコア)main.cppで、state->printで値を出力、state->nextで次の処理に進める。 途…

Observer

被観測者の状態が変化したら、観測者(Observer)に状態の変化があったことを通知するような構造をObserverパターンという。17.Observer パターン | TECHSCORE(テックスコア)main.cppで、staff1に10、staff2に20、staff3に30をセットしてる。 $ vi main.cpp $…

Mediator

複数のオブジェクト間の調整役となるオブジェクトを置くような構造をMediatorパターンという。16.Mediator パターン | TECHSCORE(テックスコア)main.cppで、managerが調整役(Mediator)となり、3つのstaffを調整する。 最初はstaff3つとも値を0にしておいて…

Facade

複数のクラスを組み合わせて処理を行う時に、その窓口となるクラスを作って、そこを経由していろいろなクラスの処理を行うようにする構造をFacadeパターンという。15.Facadeパターン | TECHSCORE(テックスコア)main.cppで、class_front::searchは窓口であり…

Chain of Responsibility

Chain of Responsibilityパターンは、ある処理がその部分の責任でできるならそこで処理し、できないなら上位部分に回すような構造。14.Chain of Responsibility パターン | TECHSCORE(テックスコア)main.cppで、センダーでイベントを送信して、ハンドラで処…

Visitor

Visitorパターンは、訪問側(visitor)を受け入れ側(acceptor)が受け入れ(accept)、その結果訪問側の処理を受け入れ側の中で実行するような構造。13.Visitor パターン | TECHSCORE(テックスコア)main.cppで、visitor側に走査する処理があるが、それをやるには…

Decorator

インスタンスにひとつひとつ機能を重ねて、盛っていくような場合に、Decoratorパターンを使う。12. Decorator パターン | TECHSCORE(テックスコア)main.cppに、ハイフンでくくる、括弧でくくる。 それだけではなく、ハイフンの外に括弧、括弧の外にハイフン…

Composite

ファイルとフォルダの関係のように、コンテンツとそのコンテンツを含むコンテナの構造が再帰的になっている場合、共通のインターフェースを実装して、意識せずに操作ができるような構造にしておく。 これがCompositeパターン。11. Composite パターン | TECH…

Strategy

とある処理で、状況によってはアルゴリズムを変更しなければならない時、切り替えられるような構造にしておくのに、Strategyパターンを使う。10. Strategy パターン | TECHSCORE(テックスコア)main.cppは、指定するstrategyが違うと、 $ vi main.cpp $ g++ -…

Bridge

『インターフェースが同じでも具体的実装例が違う』場合、それと、『そもそもの機能が違う』場合、この2つを独立して拡張したいときはBridgeパターン。9. Bridge パターン | TECHSCORE(テックスコア)main.cppは、『インターフェースが同じでも具体的実装例が…

AbstractFactory

とあるインスタンスに、いろいろな情報を設定したい時に、関係ない情報は設定したくないというのがある。 関係ある情報それ専用の工場を作り、そこから得た情報を設定できるような構造をAbstractFactoryパターンという。8. AbstractFactory パターン | TECHS…

Builder

作る過程は一緒だが、素材が違うような場合、Builderパターンを使う。7. Builder パターン | TECHSCORE(テックスコア)詳細は、 Sample/designpattern/builder/builder/src/builder at master · bg1bgst333/Sample · GitHubmain.cppは、'-'のBuilderと'*'のBu…

Prototype

あらかじめ作っておいた原型をコピーして新たなインスタンスを作りたいようなとき、Prototypeパターンを使う。6. Prototype パターン | TECHSCORE(テックスコア)詳細は、 Sample/designpattern/prototype/prototype/src/prototype at master · bg1bgst333/Sa…

Singleton

唯一のインスタンスが生成されたら、以降はそのインスタンスしか取得できないような構造がSingletonパターン。5. Singleton パターン | TECHSCORE(テックスコア)詳細は、 Sample/designpattern/singleton/singleton/src/singleton at master · bg1bgst333/Sa…

FactoryMethod

渡した引数によって生成するインスタンスが違うような場合に、FactoryMethodパターンは使う。4. FactoryMethod パターン | TECHSCORE(テックスコア)詳細は、 Sample/designpattern/factory_method/factory_method/src/factory_method at master · bg1bgst333…

TemplateMethod

内部の具体的な処理が違っても、大まかな処理の流れが定型化されたものである場合は、TemplateMethodパターンを使うことができる。3.TemplateMethod パターン | TECHSCORE(テックスコア)詳細は、 Sample/designpattern/template_method/template_method/src…

Adapter

文字列を出力する機能を持つクラスがあるとする。 この文字列にヘッダとフッタを付けて出力する機能を持つクラスを新たに定義したい。 この時、Adapterパターンを使うと、少ない修正で、文字列を出力するインターフェースを持ちつつ、ヘッダとフッタを付けて…

Iterator

C++のコレクション参照位置の移動でお馴染みのイテレータは、元々はIteratorパターンを実装したもの。1. Iteratorパターン 1 | TECHSCORE(テックスコア)class_array, class_element, class_iteratorの実装については、Sample/designpattern/iterator/iterato…

ユークリッドの互除法

2つの自然数の最大公約数を求めるには、ユークリッドの互除法というアルゴリズムを使うといい。最大公約数の算出 | WEBサービス創造記 C言語入門 - 入力した2つの自然数の最大公約数を求める - Webkaru実は2種類あって、減算を使う方法は、剰余を使う方法は…

Base64

Base64でBase64変換ができる。Base64 | Android Developershr.getExtraで取得した文字列がBase64なら、Base64変換をして、画像を保存する。MainActivity.javaで、"data"から始まって"base64"まで終わる部分を除去し、そのあとの文字列をBase64.decodeで復元…

WebView.HitTestResult.getExtra

WebView.HitTestResult.getExtraで、WebView上で長押しされた部分の補足情報を取得できる。WebView.HitTestResult | Android Developers基本的には、画像であれば、ソースURLなどが表示される。MainActivity.javaで、hr.getExtraで取得した文字列をEditText…

WebView.HitTestResult.getType

WebView.HitTestResult.getTypeでWebView上で長押しされた部分の情報を取得できる。WebView.HitTestResult | Android DevelopersMainActivity.javaで、hr.getType()で取得した値ごとにswitch-case文で振り分けてToastで表示。画像だとIMAGE_TYPE。ただ、UNKN…

CoordinatorLayout

CoordinatorLayoutは、配下のViewの調整役となるレイアウト。CoordinatorLayout | Android Developers AndroidのCoordinatorLayoutを使いこなして、モダンなスクロールを実装しよう - Yahoo! JAPAN Tech Blogといっても今回は、ToolbarとFABとSnackbarをただ…

Snackbar

Snackbarは、Toastに代わる通知機能。 (別にToastも使えるのだが。)Snackbar | Android DevelopersSnackbarを表示してみる。activity_main.xmlで、TextViewとButtonを配置。MainActivity.javaで、Buttonのbutton1にリスナーをセットし、押されたらSnackbar.m…

support.v7.widget.Toolbar

CoordinatorLayoutや、FABと組み合わせてToolbarを使う場合は、サポートライブラリの方を使う。Toolbar | Android Developersactivity_main.xmlで、アンカーのTextViewや、FloatingActionButtonの上に、android.support.v7.widget.Toolbarを配置。MainActivi…

Toolbar

Android 5.0からToolbarが追加された。 ActionBarと違い、レイアウトを定義できる。Toolbar | Android Developersactivity_main.xmlで、Toolbarを設置。 titleにtoolbar_title_textをセットしていて、strings.xmlには、toolbar_title_textに"Toolbar"をセッ…

ActionBar.setCustomView

ActionBar.setCustomViewでアクションバーにViewをセットすることもできる。ActionBar | Android DevelopersMainActivity.javaに、actionBar.setDisplayShowCustomEnabledで、カスタムビューを有効にして、actionBar.setCustomViewで、R.layout.custom_layou…

R.attr.actionLayout

actionLayoutを使うと、メニューアイテムにレイアウトごと設定できる。R.attr | Android Developersres/menu/main.xmlに、1つ目のアイテムのandroid:actionLayoutに"@layout/action_layout"をセットする。このaction_layout.xmlには、EditTextとButtonを配置…

R.attr.actionViewClass

actionViewClassを使うことで、メニューアイテムにViewを設定できる。R.attr | Android Developersres/menu/main.xmlに、showAsActionに"always"を指定したアイテムに、actionViewClassで"android.widget.EditText"を指定する。MainActivity.javaのほうは、…

FloatingActionButton

FloatingActionButton(FAB)は、Android Design Support Libraryで追加された特殊なボタン。FloatingActionButton | Android Developers AndroidのFloatingActionButtonを実装する - WonderPlanet DEVELOPER BLOGこのボタンを押すと、色々なアクションができ…