zoukankan      html  css  js  c++  java
  • 简单工厂模式

    问题描述:

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

    运行结果:

     

     

  • 相关阅读:
    Spring AOP + Redis 实现针对用户的接口访问频率限制
    Flutter 圆形透明 Loading 弹窗
    VUE 自定义组件的双向数据绑定 和替代钩子
    10个前端技巧
    前端中的数据库
    cors 跨域问题
    promise解决回调地狱问题
    VUE框架JS组件的封装 --Vue.extend
    HBuilderX 用夜神模拟器运行vue项目
    vue关于axios 拦截器的使用
  • 原文地址:https://www.cnblogs.com/znjy/p/14170832.html
Copyright © 2011-2022 走看看