简单工厂模式

问题描述:

使用简单工厂模式模拟女娲(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;
}

运行结果:

 

 

原文地址:https://www.cnblogs.com/znjy/p/14170832.html