Facade 모드가 무슨 소용이 있습니까?
18390 단어 디자인 모델FacadePatternJava
목표
Facade 모드가 무슨 소용이 있는지 간단히 설명하기 (코드가 있음)
Facade 모드가 무슨 소용이 있습니까?
간단하게 말하면 여러 가지 처리의 총괄적인 역할이다.
그래서 의뢰 하나로 다양한 일을 할 수 있다는 점이 유용하다.
Facade 모드 요구 사항
간단하게 말하면 여러 가지 처리의 총괄적인 역할이다.
그래서 의뢰 하나로 다양한 일을 할 수 있다는 점이 유용하다.
Facade 모드 요구 사항
분류도
Facade 모드의 클래스 맵
참조 소스:Wiki-Facade 모드
이번에 설명한 코드의 분류도
Librarian이 Book List와 Lending List를 보유하고 있는 것은 입장의 규격으로 창으로 사용하는 실현 자체에 변화가 없다.
클래스 캐릭터
Facade: Librarian 클래스
서브시스템: BookList 클래스, LendingList 클래스
클라이언트: Visitor 클래스
종류별 관계
코드
Librarian.javapackage facade;
// 司書
public class Librarian {
private BookList _bookList;
private LendingList _lendingList;
Librarian(BookList bookList, LendingList lendingList){
_bookList = bookList;
_lendingList = lendingList;
}
public String searchBook(String bookName) {
//所蔵されているか?
if(!_bookList.existsBook(bookName)) return "その本は所蔵していません";
//書棚にあるか?
if (_lendingList.isLending(bookName)) return "貸出中です";
// 所蔵場所
return _bookList.searchLocation(bookName);
}
}
BookList.javapackage facade;
import java.util.HashMap;
import java.util.Map;
//所蔵本台帳
public class BookList {
private Map<String, String> _record = new HashMap<String, String>();
public void addRecord(String bookName, String locationName) {
_record.put(bookName, locationName);
}
public boolean existsBook(String bookName) {
return _record.containsKey(bookName);
}
public String searchLocation(String bookName) {
return (String)_record.get(bookName);
}
}
LendingList.javapackage facade;
import java.util.ArrayList;
import java.util.List;
//貸出帳
public class LendingList {
private List<String> _record = new ArrayList<String>();
public void lending(String bookName) {
_record.add(bookName);
}
public void returned(String bookName) {
_record.remove(bookName);
}
public boolean isLending(String bookName) {
return _record.contains(bookName);
}
}
Visitor.javapackage facade;
public class Visitor {
private String _name;
private String _targetBookName;
Visitor(String name){
_name = name;
}
public void setTargetBookName(String targetBookName) {
_targetBookName = targetBookName;
}
public String targetBookName() {
return _targetBookName;
}
public String name() {
return _name;
}
}
Main.javapackage facade;
import java.io.PrintStream;
public class Main {
public static void main(String[] args) {
// 初期値セット
// (所蔵本リスト)
BookList bookList = new BookList();
bookList.addRecord("昆虫図鑑", "棚番号1");
bookList.addRecord("動物図鑑", "棚番号1");
bookList.addRecord("桃太郎", "棚番号2");
bookList.addRecord("金太郎", "棚番号2");
bookList.addRecord("コンピュータの仕組み", "棚番号3");
bookList.addRecord("Javaプログラミング", "棚番号3");
// (貸出リスト)
LendingList lendingList = new LendingList();
lendingList.lending("昆虫図鑑");
lendingList.lending("桃太郎");
lendingList.lending("コンピュータの仕組み");
PrintStream out = System.out;
// 利用者[山田くん]:司書[中村くん]に依頼する場合
Visitor yamada = new Visitor("山田");
yamada.setTargetBookName("昆虫図鑑");
// (窓口[中村くん])
Librarian nakamura = new Librarian(bookList, lendingList);
// (中村くんに昆虫図鑑の場所を聞く)
out.println(yamada.name() + "の結果:");
out.println(nakamura.searchBook(yamada.targetBookName()));
out.println();
// 利用者[木下くん]:自分で探す場合
Visitor kinoshita = new Visitor("木下");
kinoshita.setTargetBookName("動物図鑑");
if(!bookList.existsBook(kinoshita.targetBookName())) {
out.println("他の本にしよう");
return;
}
if(lendingList.isLending(kinoshita.targetBookName())) {
out.println("他の本にしよう");
return;
}
out.println(kinoshita.name() + "の結果:");
out.println(bookList.searchLocation(kinoshita.targetBookName()));
out.println();
}
}
야마다 군, 목하 군의 target BookName을 변경하고 동작을 확인하세요.
Github
용도
하면, 만약, 만약...
Facade 모드 사용을 고려해 보시기 바랍니다.
그러나 필요조건과 같이 복잡한 논리를 포함해서는 안 된다
결국 관철 처리의 핵심 역할을 요구한다.
참고 자료
Facade 모드
https://ja.wikipedia.org/wiki/Facade_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
코드 인용 원본 (이를 바탕으로 개조)
https://www.techscore.com/tech/DesignPattern/Facade.html/
Reference
이 문제에 관하여(Facade 모드가 무슨 소용이 있습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TakumiKondo/items/a0ecb62e0bcea2119b45
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
package facade;
// 司書
public class Librarian {
private BookList _bookList;
private LendingList _lendingList;
Librarian(BookList bookList, LendingList lendingList){
_bookList = bookList;
_lendingList = lendingList;
}
public String searchBook(String bookName) {
//所蔵されているか?
if(!_bookList.existsBook(bookName)) return "その本は所蔵していません";
//書棚にあるか?
if (_lendingList.isLending(bookName)) return "貸出中です";
// 所蔵場所
return _bookList.searchLocation(bookName);
}
}
package facade;
import java.util.HashMap;
import java.util.Map;
//所蔵本台帳
public class BookList {
private Map<String, String> _record = new HashMap<String, String>();
public void addRecord(String bookName, String locationName) {
_record.put(bookName, locationName);
}
public boolean existsBook(String bookName) {
return _record.containsKey(bookName);
}
public String searchLocation(String bookName) {
return (String)_record.get(bookName);
}
}
package facade;
import java.util.ArrayList;
import java.util.List;
//貸出帳
public class LendingList {
private List<String> _record = new ArrayList<String>();
public void lending(String bookName) {
_record.add(bookName);
}
public void returned(String bookName) {
_record.remove(bookName);
}
public boolean isLending(String bookName) {
return _record.contains(bookName);
}
}
package facade;
public class Visitor {
private String _name;
private String _targetBookName;
Visitor(String name){
_name = name;
}
public void setTargetBookName(String targetBookName) {
_targetBookName = targetBookName;
}
public String targetBookName() {
return _targetBookName;
}
public String name() {
return _name;
}
}
package facade;
import java.io.PrintStream;
public class Main {
public static void main(String[] args) {
// 初期値セット
// (所蔵本リスト)
BookList bookList = new BookList();
bookList.addRecord("昆虫図鑑", "棚番号1");
bookList.addRecord("動物図鑑", "棚番号1");
bookList.addRecord("桃太郎", "棚番号2");
bookList.addRecord("金太郎", "棚番号2");
bookList.addRecord("コンピュータの仕組み", "棚番号3");
bookList.addRecord("Javaプログラミング", "棚番号3");
// (貸出リスト)
LendingList lendingList = new LendingList();
lendingList.lending("昆虫図鑑");
lendingList.lending("桃太郎");
lendingList.lending("コンピュータの仕組み");
PrintStream out = System.out;
// 利用者[山田くん]:司書[中村くん]に依頼する場合
Visitor yamada = new Visitor("山田");
yamada.setTargetBookName("昆虫図鑑");
// (窓口[中村くん])
Librarian nakamura = new Librarian(bookList, lendingList);
// (中村くんに昆虫図鑑の場所を聞く)
out.println(yamada.name() + "の結果:");
out.println(nakamura.searchBook(yamada.targetBookName()));
out.println();
// 利用者[木下くん]:自分で探す場合
Visitor kinoshita = new Visitor("木下");
kinoshita.setTargetBookName("動物図鑑");
if(!bookList.existsBook(kinoshita.targetBookName())) {
out.println("他の本にしよう");
return;
}
if(lendingList.isLending(kinoshita.targetBookName())) {
out.println("他の本にしよう");
return;
}
out.println(kinoshita.name() + "の結果:");
out.println(bookList.searchLocation(kinoshita.targetBookName()));
out.println();
}
}
하면, 만약, 만약...
Facade 모드 사용을 고려해 보시기 바랍니다.
그러나 필요조건과 같이 복잡한 논리를 포함해서는 안 된다
결국 관철 처리의 핵심 역할을 요구한다.
참고 자료
Facade 모드
https://ja.wikipedia.org/wiki/Facade_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
코드 인용 원본 (이를 바탕으로 개조)
https://www.techscore.com/tech/DesignPattern/Facade.html/
Reference
이 문제에 관하여(Facade 모드가 무슨 소용이 있습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TakumiKondo/items/a0ecb62e0bcea2119b45
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Facade 모드가 무슨 소용이 있습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TakumiKondo/items/a0ecb62e0bcea2119b45텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)