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{@Overridepublic void display() {System.out.println("modern sofa");}
}class ClassicSofa implements Sofa{@Overridepublic void display() {System.out.println("classical sofa");}
}class ModernDesk implements Desk {@Overridepublic void display() {System.out.println("modern chair");}
}class ClassicDesk implements Desk{@Overridepublic void display() {System.out.println("classical chair");}
}interface Factory{Desk createProductDesk();Sofa createProductSofa();
}class ModernFactory implements Factory{@Overridepublic ModernDesk createProductDesk() {return new ModernDesk();}@Overridepublic ModernSofa createProductSofa() {return new ModernSofa();}}class ClassicalFactory implements Factory{@Overridepublic ClassicDesk createProductDesk() {return new ClassicDesk();}@Overridepublic ClassicSofa createProductSofa() {return new ClassicSofa();}}