『増補改訂版Java言語で学ぶデザインパターン入門』をKotlinでやってみる(Factory Method編)
【経緯】
『増補改訂版Java言語で学ぶデザインパターン入門』をKotlinでやってみるの第四回目。
今回はFactory Methodパターンです。
【コード】
Factory MethodパターンはTemplate Methodパターンのインスタンス生成の場面に適用したもの、らしいです。
Template Methodパターンの発展形?亜種?みたいなイメージでしょうか。
結局やりたいのはスーパークラスでインスタンスの生成の仕方を決めてしまって、具体的な処理はサブクラスで行う物です。
今回は問題がサンプルの発展形なので、まとめます。
Factory.kt
abstract class Factory {
final fun create(owner:String) : Product {
var p:Product = createProduct(owner)
registerProduct(p)
return p
}
protected abstract fun createProduct(owner: String) : Product
protected abstract fun registerProduct(product: Product)
}
Product.kt
abstract class Product {
abstract fun use()
}
IDCard.kt
class IDCard(owner: String, number:Int) : Product() {
private var own:String = owner
private var num:Int = number
init {
Log.d("IDCard", own + "(" + num + ")" + "のカードを作ります。")
}
override fun use() {
Log.d("IDCard", own + "(" + num + ")" + "のカードを使います。")
}
fun getOwner():String {
return own
}
fun getNumber():Int {
return num
}
}
IDCardFactory.kt
class IDCardFactory : Factory() {
private var owners = HashMap<Int, String>();
private var num:Int = 0
protected override fun createProduct(owner: String): Product {
num++
return IDCard(owner, num)
}
override fun registerProduct(product: Product) {
product as IDCard
owners.put(product.getNumber(), product.getOwner())
}
fun getOwner():HashMap<Int, String> {
return owners
}
}
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var factory:Factory = IDCardFactory()
var card1:Product = factory.create("とむら")
var card2:Product = factory.create("結城浩")
var card3:Product = factory.create("佐藤花子")
card1.use()
card2.use()
card3.use()
}
出力結果
とむら(1)のカードを作ります。
結城浩(2)のカードを作ります。
佐藤花子(3)のカードを作ります。
とむら(1)のカードを使います。
結城浩(2)のカードを使います。
佐藤花子(3)のカードを使います。
第四回までやってきて思いましたがこれ通常業務の実装の中で活かせる気がしないぞ。
Author And Source
この問題について(『増補改訂版Java言語で学ぶデザインパターン入門』をKotlinでやってみる(Factory Method編)), 我々は、より多くの情報をここで見つけました https://qiita.com/siroykht/items/ca1df06405131b58e179著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .