iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java 深入理解创建型设计模式之抽象工厂模式
  • 695
分享到

Java 深入理解创建型设计模式之抽象工厂模式

2024-04-02 19:04:59 695人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

1.什么是抽象工厂模式? 抽象工厂模式:  定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类。抽象工厂模式可以将简单工厂模式和工厂方法模式进

1.什么是抽象工厂模式?

  • 抽象工厂模式:  定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类。
  • 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合。
  • 从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象)。
  • 将工厂抽象成两层,AbsFactory(抽象工厂))和具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展。

我们仍然以上一篇文章的案例为主,画出抽象工厂模式下的类图。

2.案例代码

首先仍然是Pizza种类相关的几个类。


package com.szh.factory.abstractfactory.pizza;
 

public abstract class Pizza {
    //Pizza名称
    protected String name;
 
    //准备原材料,不同的披萨不一样。因此,我们做成抽象方法,具体的原材料实现交给它的子类去完成
    public abstract void prepare();
 
    //烘烤
    public void bake() {
        System.out.println(name + " baking;");
    }
 
    //切割
    public void cut() {
        System.out.println(name + " cutting;");
    }
 
    //打包
    public void box() {
        System.out.println(name + " boxing;");
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

package com.szh.factory.abstractfactory.pizza;
 
public class LDPepperPizza extends Pizza {
 
	@Override
	public void prepare() {
		setName("伦敦的胡椒pizza");
		System.out.println("伦敦的胡椒pizza 准备原材料");
	}
 
}

package com.szh.factory.abstractfactory.pizza;
 
public class LDCheesePizza extends Pizza {
 
	@Override
	public void prepare() {
		setName("伦敦的奶酪pizza");
		System.out.println("伦敦的奶酪pizza 准备原材料");
	}
 
}

package com.szh.factory.abstractfactory.pizza;
 
public class BJPepperPizza extends Pizza {
 
	@Override
	public void prepare() {
		setName("北京的胡椒pizza");
		System.out.println("北京的胡椒pizza 准备原材料");
	}
 
}

package com.szh.factory.abstractfactory.pizza;
 
public class BJCheesePizza extends Pizza {
 
	@Override
	public void prepare() {
		setName("北京的奶酪pizza");
		System.out.println("北京的奶酪pizza 准备原材料");
	}
 
}

下面是抽象工厂和工厂方法的区别之处。


package com.szh.factory.abstractfactory.order;
 
import com.szh.factory.abstractfactory.pizza.Pizza;
 
//一个抽象工厂模式的抽象层(接口)
public interface AbsFactory {
    //让下面的工厂子类来具体实现
    public Pizza createPizza(String orderType);
}

package com.szh.abstractfactory.order;
 
import com.szh.abstractfactory.pizza.BJCheesePizza;
import com.szh.abstractfactory.pizza.BJPepperPizza;
import com.szh.abstractfactory.pizza.Pizza;
 
public class BJFactory implements AbsFactory {
    @Override
    public Pizza createPizza(String orderType) {
        Pizza pizza = null;
        if("cheese".equals(orderType)) {
            pizza = new BJCheesePizza();
        } else if ("pepper".equals(orderType)){
            pizza = new BJPepperPizza();
        }
        return pizza;
    }
}

package com.szh.abstractfactory.order;
 
import com.szh.abstractfactory.pizza.LDCheesePizza;
import com.szh.abstractfactory.pizza.LDPepperPizza;
import com.szh.abstractfactory.pizza.Pizza;
 
public class LDFactory implements AbsFactory {
    @Override
    public Pizza createPizza(String orderType) {
        Pizza pizza = null;
        if ("cheese".equals(orderType)) {
            pizza = new LDCheesePizza();
        } else if ("pepper".equals(orderType)) {
            pizza = new LDPepperPizza();
        }
        return pizza;
    }
}

package com.szh.factory.abstractfactory.order;
 
import com.szh.factory.abstractfactory.pizza.Pizza;
 
import java.util.Scanner;
 
public class OrderPizza {
 
    AbsFactory absFactory;
 
    public OrderPizza(AbsFactory absFactory) {
        setFactory(absFactory);
    }
 
    private void setFactory(AbsFactory absFactory) {
        Pizza pizza = null;
        String orderType = ""; // 用户输入
        this.absFactory = absFactory;
        do {
            orderType = getType();
            // factory 可能是北京的工厂子类,也可能是伦敦的工厂子类
            pizza = absFactory.createPizza(orderType);
            if (pizza != null) { // 订购ok
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            } else {
                System.out.println("订购失败");
                break;
            }
        } while (true);
    }
 
    // 写一个方法,可以获取客户希望订购的披萨种类
    private String getType() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入 pizza 种类: ");
        String str = scanner.nextLine();
        return str;
    }
}

最后是测试类。


package com.szh.abstractfactory;
 
import com.szh.abstractfactory.order.BJFactory;
import com.szh.abstractfactory.order.LDFactory;
import com.szh.abstractfactory.order.OrderPizza;
 
import java.util.Scanner;
 
public class MainTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String content = scanner.next();
        if ("Beijing".equals(content)) {
            new OrderPizza(new BJFactory());
        } else if ("London".equals(content)) {
            new OrderPizza(new LDFactory());
        } else {
            System.out.println("无法预先匹配Pizza种类....");
            scanner.close();
        }
    }
}

3.工厂方法 + 抽象工厂总结

  • 工厂模式的意义:将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦。从而提高项目的扩展和维护性。
  • 遵循了依赖倒转原则:创建对象实例时,不要直接new类,而是把这个new类的动作放在一个工厂的方法中,并返回。有的书上说,变量不要直接持有具体类的引用。   不要让类继承具体类,而是继承抽象类或者是实现interface(接口)不要覆盖基类中已经实现的方法。

到此这篇关于Java 深入理解创建型设计模式之抽象工厂模式的文章就介绍到这了,更多相关Java 抽象工厂模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java 深入理解创建型设计模式之抽象工厂模式

本文链接: https://www.lsjlt.com/news/139436.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 深入理解创建型设计模式之抽象工厂模式
    1.什么是抽象工厂模式? 抽象工厂模式:  定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类。抽象工厂模式可以将简单工厂模式和工厂方法模式进...
    99+
    2024-04-02
  • 深入理解Java设计模式之抽象工厂模式
    目录一、什么是抽象工厂模式二、抽象工厂模式的应用场景三、抽象工厂模式和工厂方法模式对比四、抽象工厂模式的优缺点五、抽象工厂模式的实现六、总结一、什么是抽象工厂模式 为创建一组相关或相...
    99+
    2024-04-02
  • Java创建型设计模式之抽象工厂模式(Abstract Factory)
    目录抽象工厂模式概述产品等级结构与产品族优缺点主要角色抽象工厂模式的基本使用创建抽象产品创建具体产品创建抽象工厂创建具体工厂客户端执行抽象工厂模式 概述 抽象工厂模式(Abastra...
    99+
    2024-04-02
  • .Net创建型设计模式之抽象工厂模式(Abstract Factory)
    目录一、动机(Motivation)二、意图(Intent)三、结构(Structure)四、模式的组成五、抽象工厂的具体代码实现客户程序:应用到具体程序(现代风格):改造第一种改造...
    99+
    2024-04-02
  • Java创建型设计模式之工厂方法模式深入详解
    目录简单工厂模式定义产品对象创建工厂类工厂使用反射工厂方法模式概述应用场景优缺点主要角色工厂方法模式的基本使用创建抽象产品创建具体产品创建抽象工厂创建具体工厂客户端执行简单工厂模式 ...
    99+
    2024-04-02
  • Java设计模式之抽象工厂模式详解
    目录一、什么是抽象工厂模式二、示例程序三、UML一、什么是抽象工厂模式 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,这称之为抽象工厂模式(Abstract ...
    99+
    2024-04-02
  • Java设计模式之抽象工厂模式(Abstract Factory)
    作为工厂方法模式的孪生兄弟,相信大家对工厂方法模式和抽象工厂模式傻傻分不清楚吧。 那么,就让我来拯救大家吧! 抽象工厂模式 定义:所谓抽象工厂模式就是为创建一组相关或相互依赖的对象提...
    99+
    2024-04-02
  • Java 深入理解创建型设计模式之原型模式
    1.思考问题 现在有一只羊 tom,姓名为: tom,年龄为:1,颜色为:白色,请编写程序创建和 tom羊属性完全相同的10只羊。 按照传统的思路来,我们可能会按照下面的方式去写。 ...
    99+
    2024-04-02
  • Java设计模式之抽象工厂模式浅析讲解
    1.介绍 当系统准备为用户提供一系列相关对象,又不想让用户代码和这些对象形成耦合时,就可以使用抽象工厂模式。 2.如何实现 1)抽象产品--Car 2)具体产品--BYDCar、TS...
    99+
    2024-04-02
  • python设计模式之抽象工厂模式详解
    抽象工厂模式(Abstract Factory Pattern):属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它...
    99+
    2024-04-02
  • 深入理解Java设计模式之简单工厂模式
    目录一、什么是简单工厂模式二、简单工厂模式的结构三、简单工厂模式的应用场景四、简单工厂模式和工厂方法模式区别五、简单工厂模式和策略模式的异同六、简单工厂模式的优缺点七、简单工厂模式的...
    99+
    2024-04-02
  • Java 深入理解创建型设计模式之建造者模式
    1.提出问题 假如说,我们需要建房子:这一过程为打桩、砌墙、封顶。房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.3)请编写程序,完成需求。 传...
    99+
    2024-04-02
  • 怎么理解Java设计模式的抽象工厂模式
    这篇文章主要讲解了“怎么理解Java设计模式的抽象工厂模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java设计模式的抽象工厂模式”吧!一、什么是抽象工厂模式为创建一组相关或相互...
    99+
    2023-06-25
  • Java设计模式之工厂方法和抽象工厂
    全网最详细的工厂设计模式,本文主要是创建型设计模式中的工厂方法和抽象工厂,先由传统实现方式引出问题,接着对代码改进到简单工厂,后扩展到工厂方法,最后是抽象工厂模式,文中包括概念理解和...
    99+
    2024-04-02
  • Java深入探究讲解抽象工厂模式
    目录1. 抽象工厂模式解决2. 抽象工厂类图UML3. 抽象工厂模式的主要角色4. 代码实现5. 抽象工厂方法再探究6. 优缺点7. 适用示例解决工厂方法模式的问题:一个具体工厂只能...
    99+
    2024-04-02
  • Java设计模式之简单工厂 工厂方法 抽象工厂深度总结
    目录工厂模式介绍好处常见的应用简单工厂(Simple Factory)适用场景角色分配:应用案例:优缺点:简单工厂实现:工厂方法(Factory Method)适用场景角色分配:应用...
    99+
    2024-04-02
  • java设计模式之抽像工厂详解
     一、概念  提供一个创建一系列相关或相互依赖对像的接口,而无需指定它们具体的类。二、模式动机  这一系列对像之间是相互依赖的,相当于一个产品族 三、模式的结构通过上图我们可以清楚的看到抽像工厂模式包括以下4个角色:  ...
    99+
    2023-05-31
    java 设计模式 抽像工厂
  • 深入理解Java设计模式之原型模式
    目录一、前言二、什么是原型模式三、原型模式的适用场景四、原型模式的实现1.浅拷贝实现2.深拷贝实现五、总结一、前言 单例模式可以避免重复创建消耗资源的对象,但是却不得不共用对象。若是...
    99+
    2024-04-02
  • .Net设计模式之抽象工厂模式怎么实现
    这篇文章主要讲解了“.Net设计模式之抽象工厂模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.Net设计模式之抽象工厂模式怎么实现”吧!一、动机(Motivation)在软件系统...
    99+
    2023-06-30
  • Java工厂模式之简单工厂,工厂方法,抽象工厂模式详解
    目录1、简单工厂模式1.定义2.代码案例3.适用场景4.优缺点2、工厂方法模式1.定义2.代码案例3.适用场景4.优缺点3、抽象工厂模式1.定义2.代码案例3.适用场景4.优缺点4、...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作