디자인 모델 의 간단 한 공장 방법 모델 과 공장 방법 모델
모든 자동차 종류의 인터페이스:
링컨 종류:
public interface Car {
public abstract String getDescription();
}
Cadillac 클래스:
public class Lincoln implements Car {
@Override
public String getDescription() {
String description = "this is Lincoln";
return description;
}
}
Buick 클래스:
public class Cadillac implements Car {
@Override
public String getDescription() {
String description = "this is Cadillac";
return description;
}
}
사용자 인터페이스 클래스:
public class Buick implements Car {
@Override
public String getDescription() {
String description = "this is Buick";
return description;
}
}
테스트:
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class clientGUI extends JFrame implements ActionListener{
private String LINCOLN = "Lincoln";
private String CADILLAC = "Cadillac";
private String BUICK = "Buick";
private JLabel labelShowChoice;
private JTextArea textShowInfo;
private JComboBox Choice;
private JPanel panelNorth;
private JPanel panelCenter;
public void initComponents(){
labelShowChoice = new JLabel(" : ");
textShowInfo = new JTextArea();
textShowInfo.setColumns(15);
Choice = new JComboBox();
Choice.addItem(LINCOLN);
Choice.addItem(CADILLAC);
Choice.addItem(BUICK);
Choice.addActionListener(this);
panelNorth = new JPanel();
panelCenter = new JPanel();
}
public void panelAddComponenets(){
panelNorth.add(labelShowChoice);
panelNorth.add(Choice);
panelCenter.add(textShowInfo);
}
public void mainFrameAddPanel(){
this.add("North", panelNorth);
this.add("Center", panelCenter);
}
public void mianFramSet(){
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((d.width - this.getSize().width)/2, (d.height - this.getSize().height)/2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 200);
this.setVisible(true);
}
public clientGUI(){
initComponents();
panelAddComponenets();
mainFrameAddPanel();
mianFramSet();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == Choice){
String choice = (String)Choice.getSelectedItem();
Car car = null;
if(choice.equals(LINCOLN)){
car = new Lincoln();
}
if(choice.equals(CADILLAC)){
car = new Cadillac();
}
if(choice.equals(BUICK)){
car = new Buick();
}
String carDescription = car.getDescription();
textShowInfo.setText(carDescription);
}
}
}
이러한 디자인 은 의심 할 여지없이 많은 단점 이 있다. 첫째, 클 라 이언 트 에 if 문구 가 많 고 그 다음 에 클 라 이언 트 는 모든 제품 류 의 세부 사항 을 알 아야 한다.그렇다면 상술 한 디자인 을 어떻게 개선 할 것 인가?아마도 우 리 는 조건 에 따라 하나의 전문 적 인 유형 으로 구체 적 인 제품 을 만 들 수 있 을 것 이다.이렇게 하면 클 라 이언 트 는 모든 제품 의 세부 사항 을 알 필요 가 없다.이것 이 바로 디자인 모델 이 바로 공장 방법 모델 이다. 다음은 간단 한 공장 방법 모델 과 공장 방법 모델 로 상기 한 예 를 소개 한다.
단순 공장 모드
간단 한 공장 방법 모델 을 사용 하고 도표 의 디자인 은 다음 과 같다.
모든 자동차의 인터페이스:
public class main {
public static void main(String[] args) {
clientGUI cGUI = new clientGUI();
}
}
Lincoln 클래스:
public interface Car {
public abstract String getDescription();
}
Cadillac 클래스:
public class Lincoln implements Car {
@Override
public String getDescription() {
String description = "this is Lincoln";
return description;
}
}
Buick 클래스:
public class Cadillac implements Car {
@Override
public String getDescription() {
String description = "this is Cadillac";
return description;
}
}
공장 종류:
public class Buick implements Car {
@Override
public String getDescription() {
String description = "this is Buick";
return description;
}
}
사용자 인터페이스:
public class carObjCreator {
private String LINCOLN = "Lincoln";
private String CADILLAC = "Cadillac";
private String BUICK = "Buick";
public Car getCarObj(String carType){
Car car = null;
if(carType.equals(LINCOLN)){
car = new Lincoln();
}
if(carType.equals(CADILLAC)){
car = new Cadillac();
}
if(carType.equals(BUICK)){
car = new Buick();
}
return car;
}
}
테스트:
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class clientGUI extends JFrame implements ActionListener{
private String LINCOLN = "Lincoln";
private String CADILLAC = "Cadillac";
private String BUICK = "Buick";
private JLabel labelShowChoice;
private JTextArea textShowInfo;
private JComboBox Choice;
private JPanel panelNorth;
private JPanel panelCenter;
public void initComponents(){
labelShowChoice = new JLabel(" ");
textShowInfo = new JTextArea();
textShowInfo.setColumns(15);
Choice = new JComboBox();
Choice.addItem(LINCOLN);
Choice.addItem(CADILLAC);
Choice.addItem(BUICK);
Choice.addActionListener(this);
panelNorth = new JPanel();
panelCenter = new JPanel();
}
public void panelAddComponenets(){
panelNorth.add(labelShowChoice);
panelNorth.add(Choice);
panelCenter.add(textShowInfo);
}
public void mainFrameAddPanel(){
this.add("North", panelNorth);
this.add("Center", panelCenter);
}
public void mianFramSet(){
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((d.width - this.getSize().width)/2, (d.height - this.getSize().height)/2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 200);
this.setVisible(true);
}
public clientGUI(){
initComponents();
panelAddComponenets();
mainFrameAddPanel();
mianFramSet();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == Choice){
String choice = (String)Choice.getSelectedItem();
carObjCreator carCreator = new carObjCreator();
Car car = carCreator.getCarObj(choice);
String carDescription = car.getDescription();
textShowInfo.setText(carDescription);
}
}
}
사용자 가 사용 할 때 인 스 턴 스 를 만 드 는 직책 은 모두 공장 류 에 맡 기 는 것 을 볼 수 있 습 니 다. 그러면 클 라 이언 트 는 그렇게 많은 if 문 구 를 필요 로 하지 않 고 대상 이 어떻게 만 들 고 조직 하 는 지 알 필요 가 없습니다.
그러나 공장 류 는 모든 실례 의 창설 논리 에 집중 되 어 있 기 때문에 공장 류 에 문제 가 생기 면 모든 클 라 이언 트 가 영향 을 받는다.그 밖 에 우리 가 제품 을 새로 추가 하면 공장 류 를 수정 해 야 한다. 해당 하 는 공장 류 는 다시 컴 파일 해 야 한다. 즉, 시스템 이 확장 개방 에 대해 폐쇄 를 수정 하 는 원칙 에 위배 된다.
공장 방법 모델
공장 방법 모델 을 사용 할 때 상기 사례 의 디자인 은 반드시 이렇게 해 야 한다.
모든 자동차의 인터페이스:
public class main {
public static void main(String[] args) {
clientGUI cGUI = new clientGUI();
}
}
Lincoln 클래스:
public interface Car {
public abstract String getDescription();
}
Cadillac 클래스:
public class Lincoln implements Car {
@Override
public String getDescription() {
String description = "this is Lincoln";
return description;
}
}
Buick 클래스:
public class Cadillac implements Car {
@Override
public String getDescription() {
String description = "this is Cadillac";
return description;
}
}
모든 공장 클래스 의 인터페이스:
public class Buick implements Car {
@Override
public String getDescription() {
String description = "this is Buick";
return description;
}
}
Lincoln 대상 클래스 만 들 기:
public interface carCreator {
public Car getCarObj();
}
Cadillac 대상 클래스 만 들 기:
public class LincolnCreator implements carCreator {
@Override
public Car getCarObj() {
// TODO Auto-generated method stub
return new Lincoln();
}
}
Buick 대상 클래스 만 들 기:
public class CadillacCreator implements carCreator {
@Override
public Car getCarObj() {
// TODO Auto-generated method stub
return new Cadillac();
}
}
사용자 인터페이스:
public class BuickCreator implements carCreator {
@Override
public Car getCarObj() {
// TODO Auto-generated method stub
return new Buick();
}
}
테스트:
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class clientGUI extends JFrame implements ActionListener{
private String LINCOLN = "Lincoln";
private String CADILLAC = "Cadillac";
private String BUICK = "Buick";
private JLabel labelShowChoice;
private JTextArea textShowInfo;
private JComboBox Choice;
private JPanel panelNorth;
private JPanel panelCenter;
public void initComponents(){
labelShowChoice = new JLabel(" :");
textShowInfo = new JTextArea();
textShowInfo.setColumns(15);
Choice = new JComboBox();
Choice.addItem(LINCOLN);
Choice.addItem(CADILLAC);
Choice.addItem(BUICK);
Choice.addActionListener(this);
panelNorth = new JPanel();
panelCenter = new JPanel();
}
public void panelAddComponenets(){
panelNorth.add(labelShowChoice);
panelNorth.add(Choice);
panelCenter.add(textShowInfo);
}
public void mainFrameAddPanel(){
this.add("North", panelNorth);
this.add("Center", panelCenter);
}
public void mianFramSet(){
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((d.width - this.getSize().width)/2, (d.height - this.getSize().height)/2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 200);
this.setVisible(true);
}
public clientGUI(){
initComponents();
panelAddComponenets();
mainFrameAddPanel();
mianFramSet();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == Choice){
String choice = (String)Choice.getSelectedItem();
carCreator CC = null;
if(choice.equals(LINCOLN)){
CC = new LincolnCreator();
}
if(choice.equals(CADILLAC)){
CC = new CadillacCreator();
}
if(choice.equals(BUICK)){
CC = new BuickCreator();
}
Car car = CC.getCarObj();
String carDescription = car.getDescription();
textShowInfo.setText(carDescription);
}
}
}
만약 에 우리 가 차형 을 추가 하려 면 이 차형 의 유형 을 증가 하고 이 차형 대상 의 생 성 유형 을 만 드 는 것 이 개폐 원칙 에 부합 해 야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.