首页 > 其他分享 >抽象工厂模式

抽象工厂模式

时间:2022-11-08 14:24:43浏览次数:59  
标签:package class 模式 工厂 抽象 void no4 rjsj public

使用抽象工厂模式,完成下述产品等级结构:

 

 

 

类图

 

 

 

代码结构

 

 

java

   
package rjsj.no4;

public class BlackSkinWomen implements Women{
    public void play() {
        System.out.println("黑色皮肤的女人出现");
    }
}
     
package rjsj.no4;

public class Client {
    public static void main(String args[]) {
        try {
            MWFactory factory;
            Man m;
            Women w;
            factory=(MWFactory) XMLUtil.getBean();
            m=factory.produceMan();
            m.play();
            w=factory.produceWomen();
            w.play();
        }
        catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
     
package rjsj.no4;

public class BlackFactory implements MWFactory{
    public Man produceMan() {
        return new BlackSkinMan();
    }

    public Women produceWomen() {
        return new BlackSkinWomen();
    }
}
     
package rjsj.no4;

public class BlackSkinMan implements Man{
    public void play() {
        System.out.println("黑色皮肤的男人出现");
    }
}
     
package rjsj.no4;

public class WhiteFactory implements MWFactory{
    public Man produceMan() {
        return new WhiteSkinMan();
    }

    public Women produceWomen() {
        return new WhiteSkinWomen();
    }
}
     
package rjsj.no4;

public class WhiteSkinMan implements Man{
    public void play() {
        System.out.println("白色皮肤的男人出现");
    }
}
     
package rjsj.no4;

public class WhiteSkinWomen implements Women{
    public void play() {
        System.out.println("白色皮肤的女人出现");
    }
}
   
<?xml version="1.0"?>
<config>
    <className>YellowFactory</className>
</config>
   
package rjsj.no4;

public interface Man {
    public void play();
}
     
package rjsj.no4;

public interface MWFactory {
    public Man produceMan();
    public Women produceWomen();
}
     
package rjsj.no4;

public class YellowFactory implements MWFactory{
    public Man produceMan() {
        return new YellowSkinMan();
    }

    public Women produceWomen() {
        return new YellowSkinWomen();
    }
}
     
package rjsj.no4;

public class YellowSkinMan implements Man{
    public void play() {
        System.out.println("黄色皮肤男人出现");
    }
}
     
package rjsj.no4;

public class YellowSkinWomen implements Women{
    public void play()
    {
        System.out.println("黄色皮肤的女人出现");
    }
}
     
package rjsj.no4;

public interface Women {
    public void play();
}
     
package rjsj.no4;

import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;

public class XMLUtil {
    //该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象
    public static Object getBean() {
        try {
            //创建文档对象
            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dFactory.newDocumentBuilder();
            Document doc;
            doc = builder.parse(new File("src/rjsj/no4/config.xml"));

            //获取包含类名的文本节点
            NodeList nl = doc.getElementsByTagName("className");
            //System.out.println(nl);
            Node classNode=nl.item(0).getFirstChild();
            String cName=classNode.getNodeValue();

            //通过类名生成实例对象并将其返回
            Class c=Class.forName("rjsj.no4."+cName);
            Object obj=c.newInstance();
            return obj;
        }
        catch(Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
 

 

 

C++

   
#include <iostream>

using namespace std;

class SexFactory{
public:
    virtual void produce(){
        cout<<"无性别孩子"<<endl;
    }
};

class girlFactory:public SexFactory{
public:

    void produce(){
        // TODO Auto-generated method stub
        cout<<"女孩"<<endl;
    }
};

class boyFactory:public SexFactory{
public:
    void produce(){
        // TODO Auto-generated method stub
        cout<<"男孩"<<endl;
    }
};

class ColorFactory{
public:
    virtual void produce(){
        cout<<"透明";
    };
};

class yellowFactory:public ColorFactory{
public:
    void produce(){
        // TODO Auto-generated method stub
        cout<<"黄种";
    }
};

class whiteFactory:public ColorFactory{
public:
    void produce(){
        // TODO Auto-generated method stub
        cout<<"白种";
    }
};

class blackFactory:public ColorFactory{
public:
    void produce(){
        // TODO Auto-generated method stub
        cout<<"黑种";
    }
};

class Person{
public:
    Person(){
        SexFactory* sex;
        ColorFactory* color;
        int s,c;
        cout<<"请输入你要生产的小人的性别 1是女孩 2是男孩"<<endl;
        cin>>s;
        cout<<"请输入你要生产的小人的颜色 1是黄种 2是黑种 3是白种"<<endl;
        cin>>c;
        cout<<"您生产了一个";

        yellowFactory y;
        blackFactory b;
        whiteFactory w;
        switch(c) {
        case 1:
            color=&y;
            break;
        case 2:
            color=&b;
            break;
        case 3:
            color=&w;
            break;
        default:;
        }
        color->produce();

        girlFactory g;
        boyFactory bo;
        switch(s) {
        case 1:
            sex=&g;
            break;
        case 2:
            sex=&bo;
            break;
        default:;
        }
        sex->produce();

    }
};

int main()
{
    Person person;
    return 0;
}
 

 

 运行截图

标签:package,class,模式,工厂,抽象,void,no4,rjsj,public
From: https://www.cnblogs.com/libin159/p/16869546.html

相关文章

  • 注塑行业MES系统解决方案,打造数字化智能工厂 先达智控
    一直以来,生产信息管理系统和设备控制系统作为不同领域的系统在企业当中分别建设,它们作为两个独立的系统运行,二者之间不存在信息交流,然而在企业实际的运行过程中,管理者更希......
  • 追寻抽象函数(三)
    2019人教版必修一第161页12题对于函数\(f(x)=a-\frac{2}{2^x+1}\;\;(a\in\textbf{R})\)(1)探究函数\(f(x)\)d的单调性;(2)是否存在实数\(a\)使函数\(f(x)\)为奇函数?问......
  • Go | 浅谈包管理模式
    任何一门编程语言都离不开对各种工具包的使用,工具包的管理就显得异常重要了。Go的包管理方式是逐渐演进的,本文介绍Go语言的两种包管理模式。GOPATH模式引包(不推荐)在1......
  • React组件设计模式-纯组件,函数组件,高阶组件
    一、组件(1)函数组件如果你想写的组件只包含一个render方法,并且不包含state,那么使用函数组件就会更简单。我们不需要定义一个继承于React.Component的类,我们可以定......
  • React的5种高级模式
    本文概述了5种现代高级React模式,包括集成代码、优点和缺点,以及在公共库中的具体用法。像每个React开发者一样,你可能已经问过自己以下问题之一我如何建立一个可重复使用......
  • 设计模式—建造者模式
    我们通常在开发中见到一种链式的构造对象,比如:demoAnimatordemoAnimator=newdemoAnimator.Builder().setFade(true).setDuration(1000).build();那他是怎样实现的呢、......
  • 使用Postman去验证Oauth2.0授权码模式出现"Error: Bad client credentials"的解决方法
    错误时的authentication的配置如下  检查过console后,发现拿授权码去获取token时没有带上CilentSecret  经过一番奋斗发现是ClientAuthentication这里的问题......
  • 抽象类
    1.abstract修饰符修饰的类就是抽象类2.抽象类可以没有抽象方法,但是有抽象方法的类一定是抽象类3.抽象类不能通过new来创建对象,只能进行继承4.抽象方法,只有方法的声明,没......
  • Vue面试题45:history模式和hash模式有何区别?(总结自B站up主‘前端杨村长’视频,仅供自用
    分析vue-router有3个模式,其中两个更为常用,那便是history和hash;两者差别主要在显示形式和部署上;体验vue-router4.x中设置模式的方式已经改变constrouter=cr......
  • 如何理解工业互联网与智能制造,怎么共建智慧工厂?
    工业互联网就是要实现物理形式的企业在数字空间的投射,并基于此来实现的以人机物(Human,Machines,Things)泛在互联为基础上,深度感知为支撑,智能决策为导向,精准管控为目的的细胞......