[设计模式之抽象工厂模式—— 家具工厂]
题目:
小明家新开了两个工厂用来生产家具,一个生产现代风格的沙发和椅子,一个生产古典风格的沙发和椅子,现在工厂收到了一笔订单,请你帮他设计一个系统,描述订单需要生产家具的信息。
输入描述
输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示订单的数量。
接下来的 N 行,每行输入一个字符串,字符串表示家具的类型。家具类型分为 “modern” 和 “classical” 两种。
输出描述
对于每笔订单,输出字符串表示该订单需要生产家具的信息。
modern订单会输出下面两行字符串
modern chair
modern sofa
classical订单会输出下面两行字符串
classical chair
classical soft
输入示例
3
modern
classical
modern
输出示例
modern chair
modern sofa
classical chair
classical sofa
modern chair
modern sofa
import java.util.Scanner;public class Main{public static void main(String[] args){Scanner sc= new Scanner(System.in);int n=sc.nextInt();for(int i=0;i<n;i++){String name=sc.next();if(name.equals("modern")){FurnitureFactory sf=new ModernFactory();Chair chair=sf.createChair();//调用两次是因为一种风格里具有两种家具chair.show();Sofa sofa=sf.createSofa();sofa.dispaly();} else if(name.equals("classical")){FurnitureFactory sf=new ClassicalFactory();Chair chair=sf.createChair();chair.show();Sofa sofa=sf.createSofa();sofa.dispaly();}}}
}interface Chair{//抽象椅子接口void show();
}
class ModernChair implements Chair{// 具体椅⼦--现代⻛@Overridepublic void show(){System.out.println("modern chair");}
}class ClassicalChair implements Chair{// 具体椅⼦--古典⻛@Overridepublic void show(){System.out.println("classical chair");}
}interface Sofa{//抽象沙发void dispaly();
}class ModernSofa implements Sofa{// 具体沙发--现代⻛@Overridepublic void dispaly(){System.out.println("modern sofa");}
}
class ClassicalSofa implements Sofa{// 具体沙发--古典⻛@Overridepublic void dispaly(){System.out.println("classical sofa");}
}interface FurnitureFactory{// 抽象家居⼯厂,用于创造什么工厂Chair createChair();//什么工厂那他的(返回)对象就是什么类型!Sofa createSofa();
}class ModernFactory implements FurnitureFactory{// 具体现代⻛格家居⼯⼚@Overridepublic Chair createChair(){//有现代椅子return new ModernChair();}@Overridepublic Sofa createSofa(){//也有现代沙发return new ModernSofa();}
}class ClassicalFactory implements FurnitureFactory{//同理@Overridepublic Chair createChair(){return new ClassicalChair();}@Overridepublic Sofa createSofa(){return new ClassicalSofa();}
}