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

抽象工厂模式

时间:2023-11-13 11:23:32浏览次数:33  
标签:Woman show void 模式 public 抽象 Override 工厂 class

[实验任务]:人与肤色

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

 

类图

 

public class BlackFactory implements PeopleFactory
{
    @Override
    public Man produceMan()
    {
        return new BlackMan();
    }

    @Override
    public Woman produceWoman()
    {
        return new BlackWoman();
    }
}

public class BlackMan implements Man
{
    @Override
    public void show()
    {
        System.out.println("一个黑种男人");
    }
}

public class BlackWoman implements Woman
{
    @Override
    public void show()
    {
        System.out.println("一个黑种女人");
    }
}


public class Client
{
    public static void main(String[] args)
    {
        try
        {
            PeopleFactory factory;
            Man man;
            Woman woman;

            //根据xml配置文件动态实例对象
            factory = (PeopleFactory) XMLUtil.getBean();

            man = factory.produceMan();
            man.show();

            woman = factory.produceWoman();
            woman.show();
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}


public interface Man
{
    void show();
}

public interface PeopleFactory
{
    Man produceMan();

    Woman produceWoman();
}

public class WhiteFactory implements PeopleFactory
{
    @Override
    public Man produceMan()
    {
        return new WhiteMan();
    }

    @Override
    public Woman produceWoman()
    {
        return new WhiteWoman();
    }
}

public class WhiteMan implements Man
{
    @Override
    public void show()
    {
        System.out.println("一个白种男人");
    }
}

public class WhiteWoman implements Woman
{
    @Override
    public void show()
    {
        System.out.println("一个白种女人");
    }
}

public interface Woman
{
    void show();
}

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;

public class XMLUtil
{
    public static Object getBean()
    {
        try
        {
            //创建DOM文档对象
            DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dFactory.newDocumentBuilder();
            Document doc = builder.parse(new File("src/main/resources/config4.xml"));

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

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

public class YellowFactory implements PeopleFactory
{
    @Override
    public Man produceMan()
    {
        return new YellowMan();
    }

    @Override
    public Woman produceWoman()
    {
        return new YellowWoman();
    }
}

public class YellowMan implements Man
{
    @Override
    public void show()
    {
        System.out.println("一个黄种男人");
    }
}

public class YellowWoman implements Woman
{
    @Override
    public void show()
    {
        System.out.println("一个黄种女人");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <className>Tutorial_4.YellowFactory</className>
</config>

 

标签:Woman,show,void,模式,public,抽象,Override,工厂,class
From: https://www.cnblogs.com/mendianyu/p/17828728.html

相关文章

  • 考研数学笔记:线性代数中抽象矩阵性质汇总
    在考研线性代数这门课中,对抽象矩阵(矩阵\(A\)和矩阵\(B\)这样的矩阵)的考察几乎贯穿始终,涉及了很多性质、运算规律等内容,在这篇考研数学笔记中,我们汇总了几乎所有考研数学要用到的抽象矩阵的性质,详情在这里:线性代数抽象矩阵(块矩阵)运算规则(性质)汇总......
  • 实验12:外观模式
    [实验任务一]:计算机开启在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(HardDisk)的读取(read())、操作系统(OS)的载入(load()),如果某一过程发生错误则计算机启动失败。......
  • 实验13:享元模式
    [实验任务一]:围棋设计一个围棋软件,在系统中只存在一个白棋对象和一个黑棋对象,但是它们可以在棋盘的不同位置显示多次。  packagerjsj.no13;/** *客户端测试类 * */publicclassClient{   publicstaticvoidmain(String[]args){       IgoCh......
  • 软件设计实验10:组合模式
    实验10:组合模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合模式实现教材中的“文件夹浏览”这个例子。实验要求:1. 文件的执行不需真正实现,只需简单......
  • 软件设计实验11:装饰模式
    实验11:装饰模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解装饰模式的动机,掌握该模式的结构;2、能够利用装饰模式解决实际问题。 [实验任务一]:手机功能的升级用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而......
  • 享元模式--Java实现
    相关类图具体代码//ChessFactory.javapackageorg.example.test012;importjava.util.Hashtable;publicclassChessFactory{publicstaticChessFactorygetChessFactory(){returnchessFactory;}publicstaticChessFactorychessFactory=......
  • 实验2:简单工厂模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解简单工厂模式的动机,掌握该模式的结构;2、能够利用简单工厂模式解决实际问题。[实验任务一]:女娲造人使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,......
  • 企业集成模式-第四章
    四、消息传递通道4.1引言1)消息通道主题确定应用使用什么通道,以及使用通道做什么固定的通道集:在设计应用时,开发人员必须知道把哪种类型的数据放在哪里,这样才能与其他应用共享这些数据;另外还要知道在哪里查找来自其他应用的特定类型的数据。确定通道集:与之相关产生了一个问......
  • 结构型设计模式07-享元模式
    结构型设计模式07-享元模式1、享元模式介绍享元模式是一种结构型设计模式,旨在通过共享对象来减少内存使用和提高性能。它主要用于处理大量细粒度对象的情况,其中许多对象具有相似的属性和行为。在享元模式中,对象分为两种类型:内部状态(IntrinsicState)和外部状态(ExtrinsicState)。......
  • 结构型设计模式07-享元模式
    结构型设计模式07-享元模式1、享元模式介绍享元模式是一种结构型设计模式,旨在通过共享对象来减少内存使用和提高性能。它主要用于处理大量细粒度对象的情况,其中许多对象具有相似的属性和行为。在享元模式中,对象分为两种类型:内部状态(IntrinsicState)和外部状态(ExtrinsicState)。......