简单工厂模式--Java实现+C++实现
问题描述
使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象。请用程序设计实现上述场景。
问题实现
用starUML画的相应的类图:
然后就是代码实现:
Java代码实现
在Java里面,Person类相当于一个接口;
Man、Woman、Robot类相当于接口的实现类;
NvWa里面定义造人的函数方法;
Main里面定义进入程序的接口;
//Person.java
package org.example;
public interface Person {
public void say();
}
//Man.java
package org.example;
public class Man implements Person{
@Override
public void say() {
System.out.println("我是一个Man");
}
}
//Woman.java
package org.example;
public class Woman implements Person{
@Override
public void say() {
System.out.println("我是一个Woman");
}
}
//Robot.java
package org.example;
public class Robot implements Person{
@Override
public void say() {
System.out.println("我是一个Robot");
}
}
//NvWa.java
package org.example;
public class NvWa {
public static Person createPerson(String a) throws Exception {
if(a.equals("M")){
System.out.println("女娲创造了一个Man");
return new Man();
}else if(a.equals("W")){
System.out.println("女娲创造了一个Woman");
return new Woman();
}else if(a.equals("R")){
System.out.println("女娲创造了一个Robot");
return new Robot();
}else{
throw new Exception("女娲并不能创造意料之外的人");
}
}
}
//Main.java
package org.example;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc=new Scanner(System.in);
System.out.println("请选择:男人-M;女人-W;机器人-R");
//输入一个字符,用于比较要执行哪个类
String a=sc.next();
Person p=NvWa.createPerson(a);
p.say();
}
}
C++代码实现(发现一个很严重的问题,Java写多了,C++语法有点儿忘记了~~~)
在C++里面,Person类相当于抽象产品类;
Man、Woman、Robot类相当于具体产品类;
NvWa相当于工厂类;
Main相当于测试类,进入程序的接口;
#pragma once
#include <iostream>
using namespace std;
class Person
{
public:
virtual void say() = 0;
};
class Man :public Person {
public:
void say() {
cout << "我是一个Man" << endl;
}
};
class Woman :public Person {
public:
void say() {
cout << "我是一个Woman" << endl;
}
};
class Robot :public Person {
public :
void say() {
cout << "我是一个Robot" << endl;
}
};
class NvWa {
public:
Person *createPerson(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;
throw new exception("女娲并不能创造意料之外的人");
}
}
};
int main() {
cout << "请选择:男人-M;女人-W;机器人-R" << endl;
string s;
cin >> s;
Person* p;
NvWa* q = new NvWa();
p = q->createPerson(s);
p->say();
return 0;
}