🏓 設計モード2:テンプレートメソッドモード、ファクトリメソッドモード、抽象ファクトリモード🏓
21709 ワード
😽 リファレンス😽
headfirst Design Patternを参考に勉強しました.
以下のブログと記事を参照してください.
gmlwjd9405.github.io
OmarElGabry/DesignPatterns
quanke/design-pattern-java-source-code
yaboong.github.io
😼 ソースコード😼
https://github.com/bo-yoon/DesignPattern
▼▼▼テンプレートメソッドアレイ(動作モード)▼
テンプレートメソッドパターンは,その名の通りテンプレート,プログラムのスケルトンである.複数の人がそれぞれのコードを同時に作成し、後でマージする場合は、共通に使用される部分や変わらない部分については、予め定義する必要があります.この場合はテンプレートメソッドモードを使用します.
例えば、ResponseDTOの場合、共通応答部分は予め定義されている.
テンプレートメソッドモードでは、抽象クライスで簡単な基本コンテンツが実装されているか、コードが実装されていないコードを指すフックが使用されます.したがって、抽象クライスを継承するサブクラスは、ここで追加のコードを実装する.
ソースコード
package templeteMethod;
public abstract class AbstractDoit {
protected abstract void primitive();
protected abstract void hook();
public void templeteMethod() {
primitive();
hook();
}
}
package templeteMethod;
public class WeekDayDoit extends AbstractDoit {
@Override
protected void primitive() {
System.out.println("집가서 잠자기 ");
System.out.println("게임 한 판 ");
}
@Override
protected void hook() {
System.out.println("그전에 퇴근 먼저");
}
}
package templeteMethod;
public class Main {
public static void main(String [] args) {
AbstractDoit todo = new WeekDayDoit();
todo.templeteMethod();
}
}
▼ファクトリメソッドアレイ(アレイ作成)▼
ソースコード
package factoryMethod;
public class StrawberryJuice {
public void flavor() {
System.out.println("딸기 맛 쥬스");
}
}
public abstract class DrinkFactory {
abstract StrawberryJuice maker(String juice);
}
package factoryMethod;
public class JuiceFactory extends DrinkFactory{
public Juice maker(String juice) {
if(juice.equals("STRAWBERRY")) {
return new StrawberryJuice();
}
return null;
}
}
抽象ファクトリモード(作成モード)
ファクトリクラスで生成する方法はいろいろあります.つまり、一つの工場がファミリーセットです.
必要に応じて依存性を注入してオブジェクトを作成します.
ソースコード
package abstFactory;
public interface BeverageFactory {
public Beverage maker(String kind);
}
package abstFactory;
public class CoffeeFactory implements BeverageFactory {
@Override
public Beverage maker(String kind) {
kind = kind.toUpperCase();
if(kind.equals("AMERICANO")) {
return new Americano();
}
return null;
}
}
package abstFactory;
public class JuiceFactory implements BeverageFactory {
@Override
public Beverage maker(String kind) {
kind = kind.toUpperCase();
if(kind.equals("STRAWBERRY")) {
return new StrawberryJuice();
}else if(kind.equals("BANANA")){
return new BananaJuice();
}
return null;
}
}
package abstFactory;
public interface Beverage {
public void flavor();
}
package abstFactory;
public abstract class Coffee implements Beverage{
}
package abstFactory;
public class Americano extends Coffee {
@Override
public void flavor() {
System.out.println("아메리카노~ 좋아 좋아 좋아~");
}
}
package abstFactory;
public abstract class Juice implements Beverage {
}
package abstFactory;
public class BananaJuice extends Juice{
@Override
public void flavor() {
System.out.println("바나나 맛 주스!");
}
}
package abstFactory;
public class BananaJuice extends Juice{
@Override
public void flavor() {
System.out.println("바나나 맛 주스!");
}
}
package abstFactory;
public class Main {
public static void main(String [] args) {
BeverageFactory fac = new CoffeeFactory();
Beverage coffee = fac.maker("americano");
coffee.flavor();
fac = new JuiceFactory();
Beverage juice = fac.maker("banana");
juice.flavor();
}
}
아메리카노~ 좋아 좋아 좋아~
바나나 맛 주스!
Reference
この問題について(🏓 設計モード2:テンプレートメソッドモード、ファクトリメソッドモード、抽象ファクトリモード🏓), 我々は、より多くの情報をここで見つけました https://velog.io/@borab/디자인-패턴-2-템플릿-메서드-패턴-팩토리-메서드-패턴-추상-팩토리-패턴テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol