(@WhiteTaken)设计模式学习——简单工厂模式

本文介绍了简单工厂模式的概念及其应用场景,通过一个水果工厂的例子展示了如何利用简单工厂模式来创建对象,降低了客户端与具体产品的耦合度。

最近工作比较忙,所以没有怎么写博客,这几天将集中学习一下(厉风行)讲解的设计模式的相关知识,并对主要的代码进行介绍。

言归正传,接下来介绍最简单也是最基础的简单工厂设计模式。

什么是简单工厂?

简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,创建的实例通常都具有共同的父类。

假如我们有几种水果,苹果,香蕉,我们希望获得这些水果。

首先我们声明一个水果接口。

1 public interface Fruit {
2     public void Get();
3 }
View Code

然后我们需要让苹果,香蕉的去实现这个接口。

1 public class Apple implements Fruit{
2     public void Get()
3     {
4         System.out.println("Apple");
5     }
6 }
View Code

在主类中我们可以通过,直接new一个对象,来创建苹果香蕉,然后调用其Get方法。但是这样做并不是我们想要完成的效果,为了尽可能的降低耦合。

可以通过创建一个水果的简单工厂,完成水果对象的获取。

以下的几种方式均可。

 1 import java.lang.invoke.CallSite;
 2 
 3 public class FruitFactory {
 4 //    public static Fruit GetApple(){
 5 //        return new Apple();
 6 //    }
 7 //    
 8 //    public static Fruit GetBanana(){
 9 //        return new Banana();
10 //    }
11     
12 //    public static Fruit GetFruit(String type)
13 //    {
14 //        if(type.equals("Apple"))
15 //        {
16 //            return new Apple();
17 //        }else if(type.equals("Banana"))
18 //        {
19 //            return new Banana();
20 //        }
21 //        return null;        
22 //    }
23     
24 //    public static Fruit GetFruit(String type) throws InstantiationException, IllegalAccessException
25 //    {
26 //        if(type.equalsIgnoreCase("apple"))
27 //        {
28 //            return (Fruit)Apple.class.newInstance();
29 //        }else if(type.equalsIgnoreCase("banana"))
30 //        {
31 //            return (Fruit)Banana.class.newInstance();
32 //        }else{
33 //            System.out.println("找不到对应的水果");
34 //            return null;
35 //        }    
36 //    }
37     
38     public static Fruit GetFruit(String type) throws InstantiationException, IllegalAccessException
39     {
40         try {
41             Class fruit=Class.forName(type);
42             return (Fruit)fruit.newInstance();
43         } catch (ClassNotFoundException e) {
44             // TODO Auto-generated catch block
45             e.printStackTrace();
46         }
47         return null;
48     }
49 }
View Code

这样主方法,也就是我们的客户端,就可以通过直接给出要获得的对象的名称,直接获得想要的对象。

 1 public class MainClass {
 2     public static void main(String[] args) throws InstantiationException, IllegalAccessException {
 3 //        Fruit apple=FruitFactory.GetApple();
 4 //        Fruit banana=FruitFactory.GetBanana();
 5 //        apple.Get();
 6 //        banana.Get();
 7         
 8         Fruit apple=FruitFactory.GetFruit("Apple");
 9         Fruit banana=FruitFactory.GetFruit("Banana");
10         apple.Get();
11         banana.Get();
12     }
13 }
View Code

水果工厂就是一个简单工厂,如果我们这时候要创建葡萄类,只需让其实现Fruit接口即可,这是在客户端就可以通过葡萄对象的名称,获得葡萄对象,而在葡萄类中的相关功能,在主客户端中都不用考虑。

简单工厂的优点:

在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。

缺点:

简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,拓展性不是很好。

 

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值