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

抽象工厂模式

时间:2023-11-20 16:56:04浏览次数:428  
标签:Woman java package 模式 工厂 抽象 PeopleAndSkinColor public Man

[实验任务一]:人与肤色
使用抽象工厂模式,完成下述产品等级结构:

  1. 画出对应的类图;
  2. 提交源代码;
    Black.java
package PeopleAndSkinColor;

public class Black implements Color{
    @Override
    public Man produceMan() {
        return new BlackMan();
    }
    @Override
    public Woman produceWoman() {
        return new BlackWoman();
    }
}

BlackMan.java

package PeopleAndSkinColor;

public class BlackMan implements Man {
    @Override
    public void makeM() {
        System.out.println("我是黑种男人!");
    }

}

BlackWoman.java

package PeopleAndSkinColor;

public class BlackWoman implements Woman {
    @Override
    public void makeW() {
        System.out.println("我是黑种女人!");
    }

}

Client.java

package PeopleAndSkinColor;
/*
 * 客户端测试类
 */
public class Client {
    public static void main(String[] args) {
        try
        {
            Color color;
            Man man;
            Woman woman;
            color=(Color)XMLUtil.getBean();
            System.out.println(color);
            woman = color.produceWoman();
            woman.makeW();
            man=color.produceMan();
            man.makeM();
        }catch(Exception e){
            System.out.print(e.getMessage());
        }

    }
}

Color.java

package PeopleAndSkinColor;
/*
 * 抽象工厂类 (肤色)
 */
public interface Color {

    public Man produceMan();
    public Woman produceWoman();

}

Man.java

package PeopleAndSkinColor;
/*
 * 抽象产品类Man
 */
public interface Man {

    public void makeM();

}

White.java
package PeopleAndSkinColor;
/*

  • 具体工厂类 白色肤色
    */
    public class White implements Color{
    @Override
    public Man produceMan() {
    return new WhiteMan();
    }
    @Override
    public Woman produceWoman() {
    return new WhiteWoman();
    }
    }

WhiteMan.java
package PeopleAndSkinColor;

public class WhiteMan implements Man {
public void makeM() {
System.out.println("我是白种男人!");
}

}

WhiteWoman.java
package PeopleAndSkinColor;

public class WhiteWoman implements Woman {
@Override
public void makeW() {
System.out.println("我是白种女人!");
}

}

Woman.java
package PeopleAndSkinColor;
/*

  • 抽象产品类Woman
    */
    public interface Woman {

    public void makeW();
    }

XMLUtil.java
package PeopleAndSkinColor;
/*

  • 读取XML文件并根据存储在XML文件中的类名获取对应的对象
    */

import javax.xml.parsers.;
import org.w3c.dom.
;
import java.io.File;
public class XMLUtil {
@SuppressWarnings("deprecation")
public static Object getBean() {
try {
//创建DOM文档对象
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc;
doc = builder.parse(new File("src/main/resources/config.xml"));

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

        //通过类名生成实例对象返回
        Class<?> c = Class.forName("test4."+cName);
        Object obj = c.newInstance();
        return obj;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

}

Yellow.java
package PeopleAndSkinColor;
/*

  • 具体工厂类 黄色肤色
    */
    public class Yellow implements Color{
    @Override
    public Man produceMan() {
    return new YellowMan();
    }
    @Override
    public Woman produceWoman() {
    return new YellowWoman();
    }
    }

YellowMan.java
package PeopleAndSkinColor;

public class YellowMan implements Man {
public void makeM() {
System.out.println("我是黄种男人!");
}

}

YellowWoman.java
package PeopleAndSkinColor;

public class YellowWoman implements Woman {
public void makeW() {
System.out.println("我是黄种女人!");
}

}

标签:Woman,java,package,模式,工厂,抽象,PeopleAndSkinColor,public,Man
From: https://www.cnblogs.com/yzx-sir/p/17844330.html

相关文章

  • 组合模式
    目录组合模式概述结构案例实现组合模式的分类优点使用场景组合模式概述​ 对于这个图片肯定会非常熟悉,上图我们可以看做是一个文件系统,对于这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相......
  • 为什么说SaaS模式的CRM系统是更好的选择?
     在以前,CRM系统只有本地部署一个选择。但近年来,SaaS模式CRM逐渐火热。SaaS模式CRM系统联网即可访问,不需要用户在自己的服务器上安装和运行,通过订阅的方式即可获得服务。下面说说,选择SaaS模式CRM系统的理由。1、费用更低使用SaaS模式CRM系统,只需要支付账号费用,就可以通过浏览......
  • 接口、抽象类
    从设计思想层面:接口定义一种规范,实现接口的类都要遵循这种规范,体现了一种自上而下的思想;举例子:公司制定了相关规范,员工要遵守相关规范。抽象类是从所有子类中提取出共同的特征,是一种自下而上的思想。举例子:对事物的分类。从具体实现来讲:定义方法的区别:接口只能定义抽象方......
  • SpringBoot 策略模式 切换上传文件模式
    策略模式策略模式是指有一定行动内容的相对稳定的策略名称。我们定义一个接口(就比如接下来要实现的文件上传接口)我们定义所需要实现的策略实现类A、B、C、D(也就是项目中所使用的四种策略阿里云Oss上传、腾讯云Cos上传、七牛云Kodo上传、本地上传)我们通过策略上下文来调用策......
  • 学习随笔(设计模式:外观模式)
    内容今天学习了外观模式。1.外观模式,为子系统中的一组接口提供了一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。2.起始很多现在的软件思路都是遵从于外观模式,它完美的依赖倒转原则和迪米特法则的思想。3.软件编程采用三层架构,数据访问层、业务......
  • 命令模式
    实验16:命令模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解命令模式的动机,掌握该模式的结构;2、能够利用命令模式解决实际问题。 [实验任务一]:多次撤销和重复的命令模式某系统需要提供一个命令集合(注:可以使用链表,栈等集合对象实现),用于存储一系列命令对......
  • 每日随笔——外观模式
    实验任务一]:计算机开启在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(HardDisk)的读取(read())、操作系统(OS)的载入(load()),如果某一过程发生错误则计算机启动失败。......
  • 实验18:迭代器模式
    软件设计                 石家庄铁道大学信息学院 实验18:迭代器模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解迭代器模式的动机,掌握该模式的结构;2、能够利用迭代器模式解决实际问题。 [实验任务一]:JAVA和C++常见数据结构迭代器......
  • Netty源码学习4——服务端是处理新连接的&netty的reactor模式
    系列文章目录和关于我零丶引入在前面的源码学习中,梳理了服务端的启动,以及NioEventLoop事件循环的工作流程,并了解了Netty处理网络io重要的Channel,ChannelHandler,ChannelPipeline。这一篇将学习服务端是如何构建新的连接。一丶网络包接收流程当客户端发送的网络数据帧通过网......
  • Java之抽象类的详解
    1.1概述1.1.1抽象类引入父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话说,父类可能知道子类应该有哪个功能,但是功能具体怎么实现父类是不清楚的(由......