팩토리 메트로드를 터치해보도록 하겠습니다.
12101 단어 Java
오늘의 목표
Java의 Factory Method를 터치해보도록 하겠습니다.
쓸것
그러면 시작.
개시하다
먼저 익숙한 위키백과로 팩토리 메트로드를 조사해보자.
Factory Method 모드는 GoF(Gang of Four;4인조)가 정의한 디자인 모드 중 하나다.Factory Method 모드는 다른 클래스의 구조기를 자신의 방법으로 대체함으로써 애플리케이션에 전용하는 대상의 생성을 하위 클래스에서 쫓아내 클래스의 재활용성을 높이는 것이 목적이다.
영감이 없어요.
참고서에 의거하다
인스턴스를 생성하는 플랜트는 Factory Method 모드인 Templete Method 모드로 구성됩니다.
Templete Method+ 대량 생산인가요?
읽다보면 Templete Method로 팩토리반을 만들고 그 팩토리반에서 대량으로 생산하는 반을 새롭게 구상하는 절차인 것 같다.
참고서의 견본
공장 수준의 Templete
Factory.javapackage framework;
public abstract class Factory {
public final Building create(String material, String address) {
Building b = createBuilding(material, address);
registerBuilding(b);
return b;
}
protected abstract Building createBuilding(String material, String address);
protected abstract void registerBuilding(Building building);
}
공장 설치는 아래의 HouseFactory입니다.
HouseFactory.javapackage building;
import java.util.ArrayList;
import java.util.List;
import framework.Building;
import framework.Factory;
public class HouseFactory extends Factory {
private static HouseFactory factory = new HouseFactory();
private HouseFactory() {
// privateコンストラクタ
}
public static HouseFactory getInstance() {
return factory;
}
// 建物を建てた住所を登録する変数
private List<String> addresses = new ArrayList<>();
@Override
protected Building createBuilding(String material, String address) {
return new House(material, address);
}
@Override
protected void registerBuilding(Building building) {
addresses.add(((House)building).getAddress());
}
public List<String> getAddresses() {
return addresses;
}
}
피제작자의 추상적인 방법.
Building.javapackage framework;
public abstract class Building {
public abstract void live(String person);
}
제작자의 설치 방법.
House.javapackage building;
import framework.Building;
public class House extends Building {
private String material;
private String address;
House(String material, String address) {
System.out.println(material + "で" + address + "に作ります。");
this.material = material;
this.address = address;
}
@Override
public void live(String person) {
System.out.println(person + "が住みました。");
}
public String getAddress() {
return address;
}
}
Main.javaimport building.HouseFactory;
import framework.Building;
import framework.Factory;
public class Main {
public static void main(String[] args) {
Factory factory1 = HouseFactory.getInstance();
Building house1 = factory1.create("木材", "東京都港区XXXXX");
Building house2 = factory1.create("コンクリート", "東京都荒川区XXXXX");
house1.live("斎藤さん");
house2.live("佐藤さん");
}
}
실행 결과는 다음과 같습니다.木材で東京都港区XXXXXに作ります。
コンクリートで東京都荒川区XXXXXに作ります。
斎藤さんが住みました。
佐藤さんが住みました。
그렇습니까?
어쨌든 사용하고 싶은 쪽(하우스 실례를 원하는 쪽)은 팩토리를 보면 돼!그러니까참고로 팩토리 설치 클래스는 실례가 몇 개 없어도 되기 때문에 팩토리 설치 클래스는 싱레톤 모드를 혼합해 보았다.
그래서 이번에는 팩토리 메트로드의 모드를 접해 봤다.
Reference
이 문제에 관하여(팩토리 메트로드를 터치해보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/torinist/items/9dd095d9dcb4b2621948
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
package framework;
public abstract class Factory {
public final Building create(String material, String address) {
Building b = createBuilding(material, address);
registerBuilding(b);
return b;
}
protected abstract Building createBuilding(String material, String address);
protected abstract void registerBuilding(Building building);
}
package building;
import java.util.ArrayList;
import java.util.List;
import framework.Building;
import framework.Factory;
public class HouseFactory extends Factory {
private static HouseFactory factory = new HouseFactory();
private HouseFactory() {
// privateコンストラクタ
}
public static HouseFactory getInstance() {
return factory;
}
// 建物を建てた住所を登録する変数
private List<String> addresses = new ArrayList<>();
@Override
protected Building createBuilding(String material, String address) {
return new House(material, address);
}
@Override
protected void registerBuilding(Building building) {
addresses.add(((House)building).getAddress());
}
public List<String> getAddresses() {
return addresses;
}
}
package framework;
public abstract class Building {
public abstract void live(String person);
}
package building;
import framework.Building;
public class House extends Building {
private String material;
private String address;
House(String material, String address) {
System.out.println(material + "で" + address + "に作ります。");
this.material = material;
this.address = address;
}
@Override
public void live(String person) {
System.out.println(person + "が住みました。");
}
public String getAddress() {
return address;
}
}
import building.HouseFactory;
import framework.Building;
import framework.Factory;
public class Main {
public static void main(String[] args) {
Factory factory1 = HouseFactory.getInstance();
Building house1 = factory1.create("木材", "東京都港区XXXXX");
Building house2 = factory1.create("コンクリート", "東京都荒川区XXXXX");
house1.live("斎藤さん");
house2.live("佐藤さん");
}
}
木材で東京都港区XXXXXに作ります。
コンクリートで東京都荒川区XXXXXに作ります。
斎藤さんが住みました。
佐藤さんが住みました。
Reference
이 문제에 관하여(팩토리 메트로드를 터치해보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torinist/items/9dd095d9dcb4b2621948텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)