• 简单工厂模式


    问题描述:

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

    运行结果:

     

     

  • 相关阅读:
    十 mybatis逆向工程
    九 spring和mybatis整合
    八 mybatis查询缓存(一级缓存,二级缓存)和ehcache整合
    七 mybatis的延迟加载
    利用游标循环删除数据
    oracle11g空表导不出来的解决办法
    关闭启动数据库AWR功能
    数据库维护操作
    开启和关闭oracle数据库中的审计功能
    Oracle序列
  • 原文地址:https://www.cnblogs.com/znjy/p/14170832.html
Copyright © 2020-2023  润新知