デザインパターン - AbstractFactory
【abstract factoryパターンとは】
抽象工場で抽象部品を生成する
【abstract factoryパターンのクラス図】
略
【abstract factoryパターンのメリット】
さ~
【サンプル】
NabeFactory.java |
package abstractFactory.abstractItem;
// 抽象なべ工場
public abstract class NabeFactory {
public abstract Soup getSoup();
public abstract MainMaterial getMainMaterial();
}
|
MainMaterial.java |
package abstractFactory.abstractItem;
// 抽象部品
public abstract class MainMaterial {
public abstract String getName();
}
|
Soup.java |
package abstractFactory.abstractItem;
// 抽象部品
public abstract class Soup {
public abstract String getName();
}
|
CabbageNabeFactory.java |
package abstractFactory;
import abstractFactory.abstractItem.MainMaterial;
import abstractFactory.abstractItem.NabeFactory;
import abstractFactory.abstractItem.Soup;
// きゃべっつ鍋工場
public class CabbageNabeFactory extends NabeFactory{
@Override
public MainMaterial getMainMaterial() {
return new CabbageMainMaterial();
}
@Override
public Soup getSoup() {
return new CabbageSoup();
}
}
|
CabbageMainMaterial.java |
package abstractFactory;
import abstractFactory.abstractItem.MainMaterial;
// キャベっつ鍋材料
public class CabbageMainMaterial extends MainMaterial{
@Override
public String getName() {
return "キャベッツ";
}
}
|
CabbageSoup.java |
package abstractFactory;
import abstractFactory.abstractItem.Soup;
// きゃべっつ鍋スープ
public class CabbageSoup extends Soup {
@Override
public String getName() {
return "白だし";
}
}
|
ToriNabeFactory.java |
package abstractFactory;
import abstractFactory.abstractItem.MainMaterial;
import abstractFactory.abstractItem.NabeFactory;
import abstractFactory.abstractItem.Soup;
// 鶏なべ工場
public class ToriNabeFactory extends NabeFactory {
@Override
public MainMaterial getMainMaterial() {
return new ToriMainMaterial();
}
@Override
public Soup getSoup() {
return new ToriSoup();
}
}
|
ToriMainMaterial.java |
package abstractFactory;
import abstractFactory.abstractItem.MainMaterial;
// 鶏なべ材料
public class ToriMainMaterial extends MainMaterial {
@Override
public String getName() {
return "鶏肉";
}
}
|
ToriSoup.java |
package abstractFactory;
import abstractFactory.abstractItem.Soup;
// 鶏なべスープ
public class ToriSoup extends Soup {
@Override
public String getName() {
return "鶏スープ";
}
}
|
AbstractFactoryTest.java |
package abstractFactory;
import abstractFactory.abstractItem.NabeFactory;
public class AbstractFactoryTest {
public static void main(String[] args) {
// なべ容器生成
HotPot h = new HotPot();
// 鶏なべ工場
NabeFactory factory = new ToriNabeFactory();
h.addSoup(factory.getSoup());
h.addMainMaterial(factory.getMainMaterial());
h.info();
// きゃべっつなべ工場
factory = new CabbageNabeFactory();
h.addSoup(factory.getSoup());
h.addMainMaterial(factory.getMainMaterial());
h.info();
}
}
|
実行結果 |
スープ : 鶏スープ
メイン具材 : 鶏肉
スープ : 白だし
メイン具材 : キャベッツ
|