简单工厂模式--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;
}

posted @ 2023-10-13 15:38  yesyes1  阅读(3)  评论(0编辑  收藏  举报