Java 三种设计模式实例实现

一. 题目分析

  1. 熟悉建模工具。
  2. 掌握简单工厂模式、工厂方法模式、抽象工厂模式,并进行设计应用。
①.简单工厂模式

使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数 R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。
※分析:简单工厂模式属于类创建型模式,在简单工厂模式中,可以根据参数的不同返回不同类的实例。被创建的实例通常都具有共同的父类,也可用接口实现。

② . 工厂方法模式

海尔工厂(Haier)生产海尔空调(HaierAirCondition),美的工厂(Midea)生产美的空调(MideaAirCondition) 。使用工厂方法模式描述该场景,绘制类图并编程实现。
※分析:工厂方法模式也叫多态工厂模式,属于类创建型模式。在工厂方法模式中,空调父类工厂负责定义创建产品对象的公共接口,而工厂子类(如HaierAirConditionFactory)则负责生成具体的产品对象(HaierAirCondition),这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
即使有新产品添加进来,也只需要新建具体的新建产品工厂,不会违反ocp原则。
※分析:

③.抽象工厂模式

电脑配件生产工厂生产内存、CPU等硬件设备,这些内存、CPU的品牌、型号并不一定相同,根据下面的“产品等级结构-产品族”示意图,使用抽象工厂模式实现电脑配件生产过程并绘制相应的类图,绘制类图并编程实现。
※分析:抽象工厂模式属于对象创建型模式。它提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。此模式适用于产品族(且产品的个数较少)的生产。如添加新建产品子项,就需要在接口中添加新产品实例,违反开闭原则

二. 类图设计

1. 简单工厂模式

在这里插入图片描述

2. 工厂模式在这里插入图片描述
3.抽象工厂模式

在这里插入图片描述

三. 程序实现

①.man类,women类,robot类 分别实现People接口,重写接口play()方法,实现子类对象的特性。而产生三种人的任务均由PeopleFactory()类承担,其中带参函数producePeople(S)
通过用户键盘输入传入s,根据不同传入参数生成不同人种。
②.HaierAirCondition(),MideaAirCondition()分别实现接口AirCondition(),并重写其活动方法。HaierAirConditionFactory(),MideaAirConditionFactory()分别实现AirConditionFactory()接口。在各自的工厂内重写接口方法,实现产品的制造,返回实例化对象。通过改写xml文件中类名来生产不同的空调。XML配置采用Java 反射机制来完成。
③.interface<CPU ,RAM>分别是PC_CPU,Mac_CPU 的父类,子类通过重写discriber() 方法来对产品进行描述。Interface< ComputerPartsFactory>是MacFactory,和PCFactory 的父类,子类重写接口方法返回相应的子类对象,达到生产产品族的目的。

四. 调试测试截图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五. 经验总结

通过具体的代码了解掌握了三种设计模式的思想及实现方法,并在编程中学到了参数传递的新方法XML。
XML文件通过修改自身关于类名映射来实现不同对象的改变。
两种设计模式总结如下
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。


附:
具体代码 1

package AirConditionMade;

public interface airCondition {
   
	public void display();
	
package AirConditionMade;

public interface airConditionFcatory {
   
	public airCondition produce();

}}
package AirConditionMade;
import AirConditionMade.XMLUtil;
import AirConditionMade.airConditionFcatory;
import AirConditionMade.airCondition;

public class Client {
   
	public static void main(String[] args)
	  {
   
		try {
   
			airCondition AC;
			airConditionFcatory factory;
			factory=(airConditionFcatory)XMLUtil.getBean();
			AC=factory.produce();
			AC.display();
			
		}
		catch(Exception e)
		{
   
			System.out.println(e.getMessage());
		}

	}

}
package AirConditionMade;

public class HaierAirCondition implements airCondition{
   
	public void display() {
   
		System.out.println("HaierAirCondition hava made!");
		System.out.println("海尔空调下线销售中");
		
	}

}
package AirConditionMade;

public class HaierAirConditionFacctory implements airConditionFcatory{
   
     public airCondition produce() {
   
    	 System.out.println("海尔集团生产海尔空调"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值