问题描述:
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象。请用程序设计实现上述场景。
类图:
Java源代码:
//Person.java: public interface Person { public void say(); } //Robot.java public class Robot implements Person{ public void say() { System.out.println("我是一个Robot"); } } //Woman.java public class Woman implements Person{ public void say() { System.out.println("我是一个Woman"); } } //Man.java public class Man implements Person { public void say() { System.out.println("我是一个Man"); } } //Nvwa.java public class Nvwa { public static Person producePerson(String a) throws Exception { if(a.equalsIgnoreCase("M")) { System.out.println("女娲造了一个Man"); return new Man(); } else if(a.equalsIgnoreCase("W")) { System.out.println("女娲造了一个Woman"); return new Woman(); } else if(a.equalsIgnoreCase("R")) { System.out.println("女娲造了一个Robot"); return new Robot(); } else { throw new Exception("对不起,女娲不能造这样的人"); } } } //main.java import java.util.Scanner; public class main { public static void main(String[] args) { try { Person p; String can; System.out.println("**M:男人 W:女人 R:机器人**"); System.out.print("请选择:"); Scanner input=new Scanner(System.in); can=input.next(); p=Nvwa.producePerson(can); p.say(); } catch(Exception e) { System.out.println(e.getMessage()); } } }
运行结果:
C++源代码:
#include<iostream> #include<string> using namespace std; //抽象产品类——Person类 class Person{ public: virtual void say()=0; }; //具体产品类——Man类 class Man:public Person{ public: void say(){ cout<<"我是一个Man"<<endl; } }; //具体产品类——Woman类 class Woman:public Person{ public: void say(){ cout<<"我是一个Woman"<<endl; } }; //具体产品类——Robot类 class Robot:public Person{ public: void say(){ cout<<"我是一个Robot"<<endl; } }; //工厂类——Nvwa类 class Nvwa{ public: Person *producePerson(string a){ if(a.compare("M")==0){ cout<<"女娲造了一个Man"<<endl; return new Man(); }else if(a.compare("W")==0){ cout<<"女娲造了一个Woman"<<endl; return new Woman(); }else if(a.compare("R")==0){ cout<<"女娲造了一个Robot"<<endl; return new Robot(); }else{ cout<<"对不起,女娲不能造这样的人"<<endl; } } }; //测试类——main类 int main(){ string s; Person *p; Nvwa *q=new Nvwa(); cout<<"***M:男人 W:女人 R:机器人***"<<endl; cout<<"请输入:"; cin>>s; p=q->producePerson(s); p->say(); return 0; }
运行结果: