1、问题描述
小明家新开了两个工厂用来生产家具,一个生产现代风格的沙发和椅子,一个生产古典风格的沙发和椅子,现在工厂收到了一笔订单,请你帮他设计一个系统,描述订单需要生产家具的信息。
输入试例:
3
modern
classical
modern
2、抽象工厂模式
在⼯⼚⽅法模式中,每个具体⼯⼚只负责创建单⼀的产品。但是如果有多类产品
呢,⽐如说“⼿机”,⼀个品牌的⼿机有⾼端机、中低端机之分,这些具体的产品都需要建⽴⼀个单独的⼯⼚类,但
是它们都是相互关联的,都共同属于同⼀个品牌,这就可以使⽤到【抽象⼯⼚模式】
作者认为,就是将具有某个共同特性的产品,统一交给某种工厂来创建,避免每个产品都要一个新工厂来生成。
3、代码
该题的统一特性为现代和经典,所以分为现代工厂和经典工厂
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int number=sc.nextInt();
sc.nextLine();
for(int i=0;i<number;i++){
String s=sc.nextLine();
if(s.equals("modern")){
Factory modernFactory=new ModernFactory();
Desk modernDesk=modernFactory.createProductDesk();
Sofa modernSofa=modernFactory.createProductSofa();
modernDesk.display();
modernSofa.display();
}else if(s.equals("classical")){
Factory classicalFactory=new ClassicalFactory();
Desk classicalDesk=classicalFactory.createProductDesk();
Sofa classicalSofa=classicalFactory.createProductSofa();
classicalDesk.display();
classicalSofa.display();
}
}
}
}
interface Sofa{
void display();
}
interface Desk{
void display();
}
class ModernSofa implements Sofa{
@Override
public void display() {
System.out.println("modern sofa");
}
}
class ClassicSofa implements Sofa{
@Override
public void display() {
System.out.println("classical sofa");
}
}
class ModernDesk implements Desk {
@Override
public void display() {
System.out.println("modern chair");
}
}
class ClassicDesk implements Desk{
@Override
public void display() {
System.out.println("classical chair");
}
}
interface Factory{
Desk createProductDesk();
Sofa createProductSofa();
}
class ModernFactory implements Factory{
@Override
public ModernDesk createProductDesk() {
return new ModernDesk();
}
@Override
public ModernSofa createProductSofa() {
return new ModernSofa();
}
}
class ClassicalFactory implements Factory{
@Override
public ClassicDesk createProductDesk() {
return new ClassicDesk();
}
@Override
public ClassicSofa createProductSofa() {
return new ClassicSofa();
}
}