Java设计模式(二)简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式实例

实例一:简单电视机工厂
某电视机厂专为各知名电视机品牌代工生产各类电视机,当需要海尔牌电视机时只需要在调用该工厂的工厂方法时传入参数“Haier”,需要海信电视机时只需要传入参数“Hisense”,工厂可以根据传入的不同参数返回不同品牌的电视机。

类图:
在这里插入图片描述
具体代码:
Factory:工厂角色

public class TVFactory
{
	public static TV produceTV(String brand) throws Exception
	{
		if(brand.equalsIgnoreCase("Haier"))
		{
			System.out.println("电视机工厂生产海尔电视机!");
			return new HaierTV();
		}
		else if(brand.equalsIgnoreCase("Hisense"))
		{
			System.out.println("电视机工厂生产海信电视机!");
			return new HisenseTV();
		}
		else
		{
			throw new Exception("对不起,暂不能生产该品牌电视机!");
		}
	}
}

Product:抽象产品角色

public interface TV
{
	public void play();
}

ConcreteProduct:具体产品角色

public class HaierTV implements TV
{
	public void play()
	{
		System.out.println("海尔电视机生产完毕");
	}
}

public class HisenseTV implements TV
{
	public void play()
	{
		System.out.println("海信电视机生产完毕");
	}	
}

Client客户端

public class Client
{
	public static void main(String args[]) throws Exception 
	{

         	TV tv;
         	System.out.println("请输入要生产的品牌:");
            Scanner sc=new Scanner(System.in);
            String brandName=sc.nextLine();
			tv=TVFactory.produceTV(brandName);
         	tv.play();
         	sc.close();

	}
}

结果:
在这里插入图片描述

工厂方法模式实例

实例一:电视机工厂
将原有的工厂进行分割,为每种品牌的电视机提供一个子工厂,海尔工厂专门负责生产海尔电视机,海信工厂专门负责生产海信电视机,如果需要生产TCL电视机或创维电视机,只需要对应增加一个新的TCL工厂或创维工厂即可,原有的工厂无须做任何修改,使得整个系统具有更加的灵活性和可扩展性。

类图:
在这里插入图片描述
Product:抽象产品

public interface TV
{
	public void play();
}

ConcreteProduct:具体产品

public class HaierTV implements TV
{
	public  void play()
	{
		System.out.println("海尔电视机播放中......");
	}
}

public class HisenseTV implements TV
{
	public void play()
	{
		System.out.println("海信电视机播放中......");
	}	
}

Factory:抽象工厂

public interface TVFactory
{
    public TV produceTV();
}

ConcreteFactory:具体工厂

public class HaierTVFactory implements TVFactory
{
    public TV produceTV()
    {
    	System.out.println("海尔电视机工厂生产海尔电视机。");
    	return new HaierTV();
    }
}

public class HisenseTVFactory implements TVFactory
{
    public TV produceTV()
    {
    	System.out.println("海信电视机工厂生产海信电视机。");
    	return new HisenseTV();
    }
}

客户端:

public class Client
{
	public static void main(String args[])
	{
         try
         {
         	TVFactory HaierTVFactory =new HaierTVFactory();
         	TV tv = HaierTVFactory.produceTV();
         	tv.play();
         }
         catch(Exception e)
         {
         	System.out.println(e.getMessage());
         }
	}
}

结果:
在这里插入图片描述

抽象工厂模式实例

实例一:电器工厂
一个电器工厂可以产生多种类型的电器,如海尔工厂可以生产海尔电视机、海尔空调等,TCL工厂可以生产TCL电视机、TCL空调等,相同品牌的电器构成一个产品族,而相同类型的电器构成了一个产品等级结构,现使用抽象工厂模式模拟该场景。

类图:
在这里插入图片描述
AbstractFactory:抽象工厂

public interface EFactory
{
	public Television produceTelevision();
	public AirConditioner produceAirConditioner();
}

ConcreteFactory:具体工厂

public class TCLFactory implements EFactory
{
	public Television produceTelevision()
	{
		return new TCLTelevision();
	}
	
	public AirConditioner produceAirConditioner()
	{
		return new TCLAirConditioner();
	}
}

public class HaierFactory implements EFactory
{
	public Television produceTelevision()
	{
		return new HaierTelevision();
	}
	
	public AirConditioner produceAirConditioner()
	{
		return new HairAirConditioner();
	}
}

AbstractProduct:抽象产品

public interface Television
{
	public void play();
}
public interface AirConditioner
{
	public void changeTemperature();
}

Product:具体产品

public class HaierTelevision implements Television
{
	public void play()
	{
		System.out.println("海尔电视机播放中......");
	}
}
public class TCLTelevision implements Television
{
	public void play()
	{
		System.out.println("TCL电视机播放中......");
	}
}

public class TCLAirConditioner implements AirConditioner
{
	public void changeTemperature()
	{
		System.out.println("TCL空调温度改变中......");
	}
}

public class HairAirConditioner implements AirConditioner
{
	public void changeTemperature()
	{
		System.out.println("海尔空调温度改变中......");
	}
}

客户端:

public class Client
{
	public static void main(String args[])
	{
         try
         {
         	EFactory factory =new HaierFactory();
         	Television tv;
         	AirConditioner ac;
         	tv=factory.produceTelevision();
         	tv.play();
         	ac=factory.produceAirConditioner();
         	ac.changeTemperature();
         }
         catch(Exception e)
         {
         	System.out.println(e.getMessage());
         }
	}
}

结果:
在这里插入图片描述

<think>好的,我需要处理用户关于头歌平台中简单工厂模式的查询。首先,用户可能希望了解如何在头歌平台上找到相关示例教程或实现方法,特别是简单工厂模式的应用。根据提供的引用内容,特别是引用[1]、[2]、[4]、[5],这些资料详细介绍了简单工厂模式的定义、实现示例以及适用场景。 首先,我需要确认用户提到的“头歌平台”是否是指某个特定的教育或编程学习平台。假设头歌平台类似于其他在线编程教育平台,可能包含设计模式的教学内容。根据引用[1]和[4],简单工厂模式的核心是使用一个静态方法来创建对象,客户端无需知道具体类。引用[5]提供了一个用Python实现的简易计算器的例子,这可以作为参考。 接下来,我需要整理简单工厂模式的基本结构,包括工厂类、抽象产品和具体产品。例如,在计算器案例中,工厂类根据输入的运算符生成相应的运算对象。这符合引用[2]中提到的静态工厂方法的特点。 用户可能需要具体的代码示例,因此需要准备Python或Java代码片段。引用[4]提到了Java示例,而引用[5]是Python的,因此可能需要两种语言的示例。同时,需要确保代码符合头歌平台的教学风格,可能包括任务描述、代码框架和测试案例。 另外,用户可能希望了解如何在头歌平台上找到相关教程,因此需要建议他们搜索关键词,如“简单工厂模式 头歌”、“设计模式 实验”等,并提及可能的实践环节,如创建计算器或日志记录器。 需要验证引用内容是否支持这些信息。例如,引用[1]讨论了简单工厂模式的适用场景,引用[4]详细说明了三种工厂模式的区别,引用[5]提供了具体的Python实现。确保回答中的每个部分都有引用支持,并在适当的位置添加引用标识。 最后,生成相关问题时要围绕简单工厂模式的实现、优缺点、平台上的实验任务以及与其他模式的区别。确保问题符合用户可能进一步探索的方向。</think>### 头歌平台中简单工厂模式的实现方法 在头歌平台(假设为编程教育平台)中,**简单工厂模式**通常通过以下步骤实现: --- #### 1. **简单工厂模式核心思想** - **定义**:通过一个工厂类,根据输入参数决定创建哪种具体产品类的实例,客户端无需直接实例化具体类[^1][^2][^4]。 - **核心组件**: - **工厂类**:包含静态方法,负责创建对象。 - **抽象产品接口**:定义产品的公共方法。 - **具体产品类**:实现接口的具体类。 --- #### 2. **示例代码实现(Python)** 以“计算器功能”为例,演示简单工厂模式在头歌平台中的典型应用[^5]: ```python # 抽象产品:运算接口 class Operation: def get_result(self, a, b): pass # 具体产品:加法 class Add(Operation): def get_result(self, a, b): return a + b # 具体产品:乘法 class Multiply(Operation): def get_result(self, a, b): return a * b # 简单工厂类 class OperationFactory: @staticmethod def create_operation(op_type): if op_type == "+": return Add() elif op_type == "*": return Multiply() else: raise ValueError("不支持的运算符") # 客户端调用 operator = OperationFactory.create_operation("+") result = operator.get_result(3, 5) # 输出8 ``` --- #### 3. **头歌平台中的实验任务设计** 在平台中,简单工厂模式可能涉及以下实践任务: 1. **任务描述**: > “实现一个日志记录器工厂,根据输入类型(文件/控制台)创建对应的日志记录器对象。” 2. **代码框架**: 平台可能提供抽象接口 `Logger` 和工厂类 `LoggerFactory` 的骨架代码,要求补全具体类(如 `FileLogger`, `ConsoleLogger`)。 3. **测试用例**: 输入 `"file"` 应返回文件日志器实例,并验证写入文件功能[^5]。 --- #### 4. **适用场景(头歌平台可能强调的内容)** - 对象创建逻辑简单,且类型有限(如运算符、日志器、图形工具)[^1][^2]。 - 需要将对象创建与使用解耦,便于扩展新类型(如新增除法运算)。 --- #### 5. **如何在头歌平台查找相关内容?** - **搜索关键词**:`简单工厂模式 头歌`、`设计模式 实验`。 - **实验分类**:在“面向对象设计”或“创建型模式”章节中查找相关实验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值