【设计模式】工厂模式

eda、gnm、anm究竟是个啥? eda:主成分分析 gnm:高斯网络模型 anm:各向异性网络模型 阅读详情

工厂模式

一、简单工厂模式

1.看一个具体的需要

有一个生产披萨的需求,要便于披萨种类的扩展,要便于维护

  • 披萨种类很多
  • 只做步骤分为prepare bake cut box
  • 完成披萨的定个功能
2.使用传统的方式来完成
2.1思路分析

在这里插入图片描述

2.2代码
package com.slp.pattern.factory.v1;

/**
 * @ClassName Pizza
 * @Description TODO
 * @Author sanglp
 * @Date 2020/8/17 13:00
 * @Version 1.0
 **/
public abstract class Pizza {
    private String name;
    public abstract void prepare();
    public  void bake(){
        System.out.println(name+" bake");
    }
    public  void cut(){
        System.out.println(name+" cut");
    }
    public  void box(){
        System.out.println(name+" box");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

package com.slp.pattern.factory.v1;

/**
 * @ClassName GreekPizza
 * @Description TODO
 * @Author sanglp
 * @Date 2020/8/17 13:02
 * @Version 1.0
 **/
public class GreekPizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("prepare GreekPizza");
    }

}


package com.slp.pattern.factory.v1;

/**
 * @ClassName ChinaPizza
 * @Description TODO
 * @Author sanglp
 * @Date 2020/8/17 13:02
 * @Version 1.0
 **/
public class ChinaPizza extends Pizza {
    @Override
    public void prepare() {
        System.out.println("prepare ChinaPizza");
    }


}


package com.slp.pattern.factory.v1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

/**
 * @ClassName OrderPizza
 * @Description TODO
 * @Author sanglp
 * @Date 2020/8/17 12:58
 * @Version 1.0
 **/
public class OrderPizza {
    public static void main(String[] args) {
        OrderPizza orderPizza = new OrderPizza();
    }
    public OrderPizza(){
        Pizza pizza = null;
        String orderType ;//订购的类型
        do{
            orderType=getType();
            if(orderType.equals("greek")){
                pizza = new GreekPizza();
                pizza.setName("希腊披萨");
            }else if(orderType.equals("china")){
                pizza = new ChinaPizza();
                pizza.setName("中国披萨");
            }else {

                break;
            }
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();

        }while (true);
    }

    /**
     * pizza种类从控制台输入
     * @return
     */
    private String getType() {
        BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
        String str = null;
        try {
            str = s.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }
}

2.3 传统方式的优缺点
  • 优点是比较好理解,简单易操作
  • 缺点是违反了设计模式的ocp原则,及对扩展开发,对修改关闭。即当我们给类增加新功能的时候,尽量不修改代码,或者是少修改代码。
  • 比如我们此时需要新增加一个种类,那么orderPizza中需要新增分支
2.4 改进思路

修改代码可以接受,但是如果我们在其他的地方也有创建的代码 ,就意味着,也需要修改,而创建pizza的代码,往往会有很多。也就是说有很多类都在调用这个方法。

这样的话,我们可以将创建pizza对象封装到一个类中,这样我们有新的pizza种类的时候,只需要修改该类即可,这样其他创建到pizza对的diam就不需要修改了

这也就是简单工厂模式

3.简单工厂模式基本介绍

简单工厂模式属于创建型模式,是工厂模式的一种,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式中最简单实用的模式。

简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为

在软件开发中,当我们会用到大量的创建某种、某类或某批对象时,就会使用到工厂模式。

3.1 使用简单工厂模式
  • 定义一个可以实例化Pizza对象的类,封装创建对象的代码
    在这里插入图片描述

  • 示例代码

package com.slp.pattern.factory.v2;

/**
 * @ClassName SimpleFactory
 * @Description 简单工厂模式
 * @Author sanglp
 * @Date 2020/8/17 13:56
 * @Version 1.0
 **/
public class SimpleFactory {
    public Pizza createPizza(String orderType){
        Pizza pizza = null;
        if(orderType.equals("greek")){
            pizza = new GreekPizza();
            pizza.setName("希腊披萨");
        }else if(orderType.equals("china")){
            pizza = new ChinaPizza();
            pizza.setName("中国披萨");
        }else {

            System.out.println("输入有误");
        }
       return pizza;

    }

    /**
     * 简单工厂模式,也叫静态工厂模式
     * @param orderType
     * @return
     */
    public static Pizza createPizzav2(String orderType){
        Pizza pizza = null;
        System.out.println("使用简单工厂模式2");
        if(orderType.equals("greek")){
            pizza = new GreekPizza();
            pizza.setName("希腊披萨");
        }else if(orderType.equals("china")){
            pizza = new ChinaPizza();
            pizza.setName("中国披萨");
        }else {

            System.out.println("输入有误");
        }
        return pizza;
    }
}

package com.slp.pattern.factory.v2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @ClassName OrderPizza
 * @Description TODO
 * @Author sanglp
 * @Date 2020/8/17 14:01
 * @Version 1.0
 **/
public class OrderPizza {
    //定义一个简单工厂
    SimpleFactory simpleFactory;
    Pizza pizza = null;
    //构造器
    public  OrderPizza(SimpleFactory simpleFactory){
        setFactory(simpleFactory);
    }

    public void setFactory(SimpleFactory simpleFactory){
        String orderType = "";
        this.simpleFactory = simpleFactory;//设置简单工厂对象
        do{
            orderType = getType();
            pizza = this.simpleFactory.createPizza(orderType);
            if(pizza!=null) {
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            }else {
                System.out.println("订购失败");
            }
        }while (true);
    }
    /**
     * pizza种类从控制台输入
     * @return
     */
    private String getType() {
        BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
        String str = null;
        try {
            str = s.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }
}

二、工厂方法模式

1.看一个新的需求

还是上面的案例,但是现在客户在点pizza的时候可以点不同口味的披萨,比如北京的奶酪pizza,北京的胡椒pizza或者伦敦的奶酪pizza,伦敦的胡椒pizza

2.思路一

使用简单工厂模式,创建不同的简单工厂类,比如BJPizzaSimpleFactory.LDPizzaSimpleFactory等等,从当前这个案例来说,也是可以的。但是考虑更久远一些的话其实并不太好。

3.思路二

使用工厂方法模式

4.工厂方法模式介绍
  • 工厂方法模式设计方案:将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现
  • 工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类,工厂方法模式将对象的实例推迟到子类
5.工厂方法模式应用案例

在这里插入图片描述

package com.slp.pattern.factory.v3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @ClassName OrderPizza
 * @Description TODO
 * @Author sanglp
 * @Date 2020/8/17 16:34
 * @Version 1.0
 **/
public abstract class OrderPizza {
    /**
     * 定义一个抽象方法,让各个工厂类去实现
     * @param orderType
     * @return
     */
    abstract Pizza createPizza(String orderType);

    public OrderPizza(){
        Pizza pizza = null;
        String orderType;//订购pizza的类型
        do{
            orderType = getType();
            pizza = createPizza(orderType);
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
        }while (true);
    }

    protected  String getType(){
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String orderType = null;
        try {
            orderType = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return orderType;
    }
}

package com.slp.pattern.factory.v3;

/**
 * @ClassName BJOrderPizza
 * @Description TODO
 * @Author sanglp
 * @Date 2020/8/17 16:38
 * @Version 1.0
 **/
public class BJOrderPizza extends OrderPizza {
    @Override
    Pizza createPizza(String orderType) {
        Pizza pizza = null;
        if(orderType.equals("cheese")){
            pizza = new BJCheesePizza();
            pizza.setName("bjcheese");
        }else  if(orderType.equals("pepper")){
            pizza = new BJPepperPizza();
            pizza.setName("bjpepper");
        }
        return  pizza;
    }
}

package com.slp.pattern.factory.v3;

/**
 * @ClassName LDOrderPizza
 * @Description TODO
 * @Author sanglp
 * @Date 2020/8/17 16:42
 * @Version 1.0
 **/
public class LDOrderPizza extends OrderPizza {
    @Override
    Pizza createPizza(String orderType) {
        Pizza pizza = null;
        if(orderType.equals("perper")){
            pizza = new LDGreekPizza();
        }
        return pizza;
    }
}

三、抽象工厂模式

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

在这里插入图片描述

#### 2.示例

package com.slp.pattern.factory.v4;

/**
 * 抽象工厂模式的抽象层  解决
 */
public interface AbsFactory {
    /**
     * 让工厂子类来具体实现
     * @param orderType
     * @return
     */
    public Pizza createPizza(String orderType);
}

package com.slp.pattern.factory.v4;

public class BJFactory implements AbsFactory {
    @Override
    public Pizza createPizza(String orderType) {
        System.out.println("输入为:"+orderType);
        Pizza pizza = null;
        if(orderType.equals("cheese")){
            pizza = new BJCheesePizza();
        }else if(orderType.equals("pepper")){
            pizza = new BJPepperPizza();
        }else {
            System.out.println("输入有误");
        }
        return pizza;
    }
}

package com.slp.pattern.factory.v4;

public class LDFactory implements AbsFactory {
    @Override
    public Pizza createPizza(String orderType) {
        Pizza pizza = null;
        if(orderType.equals("cheese")){
            pizza = new LDCheessPizza();
        }else if(orderType.equals("pepper")){
            pizza = new LDGreekPizza();
        }else {
            System.out.println("输入有误");
        }
        return pizza;
    }
}

package com.slp.pattern.factory.v4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class OrderPizza {
    public OrderPizza(AbsFactory factory){
        setFactory(factory);
    }
    AbsFactory factory;
    private void setFactory(AbsFactory absFactory){
        Pizza pizza = null;

        factory = absFactory;
        do{
            String orderType = getType();
            //factory可能是北京工厂子类 也可能是伦敦工厂子类
            pizza = factory.createPizza(orderType);
            if (pizza!=null) {
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            }else {
                break;
            }
        }while (true);
    }

    protected  String getType(){
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String orderType = null;
        try {
            orderType = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return orderType;
    }
}

package com.slp.pattern.factory.v4;

/**
 * 抽象工厂模式
 */
public class Test {
    public static void main(String[] args) {
        new OrderPizza(new BJFactory());
    }
}

四、应用

1. JDK中的Calendar类中,就使用了简单工厂模式
package com.slp.pattern.factory.use;

import java.util.Calendar;

public class Factory {
    public static void main(String[] args) {
        //getInstance是一个静态方法
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.get(Calendar.YEAR));
    }
}

public static Calendar getInstance()
    {
        return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
    }
private static Calendar createCalendar(TimeZone zone,
                                           Locale aLocale)
    {
        CalendarProvider provider =
            LocaleProviderAdapter.getAdapter(CalendarProvider.class, aLocale)
                                 .getCalendarProvider();
        if (provider != null) {
            try {
                return provider.getInstance(zone, aLocale);
            } catch (IllegalArgumentException iae) {
                // fall back to the default instantiation
            }
        }

        Calendar cal = null;

        if (aLocale.hasExtensions()) {
            String caltype = aLocale.getUnicodeLocaleType("ca");
            if (caltype != null) {
                switch (caltype) {
                case "buddhist":
                cal = new BuddhistCalendar(zone, aLocale);
                    break;
                case "japanese":
                    cal = new JapaneseImperialCalendar(zone, aLocale);
                    break;
                case "gregory":
                    cal = new GregorianCalendar(zone, aLocale);
                    break;
                }
            }
        }
        if (cal == null) {
            // If no known calendar type is explicitly specified,
            // perform the traditional way to create a Calendar:
            // create a BuddhistCalendar for th_TH locale,
            // a JapaneseImperialCalendar for ja_JP_JP locale, or
            // a GregorianCalendar for any other locales.
            // NOTE: The language, country and variant strings are interned.
            if (aLocale.getLanguage() == "th" && aLocale.getCountry() == "TH") {
                cal = new BuddhistCalendar(zone, aLocale);
            } else if (aLocale.getVariant() == "JP" && aLocale.getLanguage() == "ja"
                       && aLocale.getCountry() == "JP") {
                cal = new JapaneseImperialCalendar(zone, aLocale);
            } else {
                cal = new GregorianCalendar(zone, aLocale);
            }
        }
        return cal;
    }

五、工厂模式小结

1.工厂模式的意义

将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦,从而提高项目的扩展和维护性

2.三种工厂模式

简单工厂 、工厂方法 、抽象工厂

3.设计模式的依赖抽象原则
  • 创建对象实例时,不要直接new类,而是把这个new类的动作放在一个工厂的方法中,并返回,也有的说,变量不要直接持有具体的引用
  • 不要让类继承具体类,而是继承抽象类或者是实现接口
  • 不要覆盖类中已经实现的方法
把 ABAP 采购订单增强做成一条可控流水线:BAdI ME_PROCESS_PO_CUST 全流程实战 摘要: SAP MM模块的ME_PROCESS_PO_CUST BAdI提供了采购订单全生命周期的增强点,覆盖从ME2*N事务到BAPI调用的各类场景。该接口通过INITIALIZE、OPEN、PROCESS_*系列方法、CHECK等组成完整处理流水线,支持字段控制、业务校验、数据派生等功能。关键注意事项包括:PROCESS_*方法仅在相关对象变更时触发、字段控制需区分参考键与动态规则、避免递归调用等。该BAdI采用面向对象设计,通过IF_PURCHASE_ORDER_*等接口操作采购单据对象,而非直接修改 阅读详情

相关推荐

计算机网络期末复习提纲(全知识点总结)

计算机网络期末复习提纲全知识点总结第一章 概述1.基本概念- 链路,结点,协议和服务,实体和对等实体,各层PDU- C/S模式,B/S模式,P2P模式- LAN,WAN,MAN,PAN的划分- 网络性能参数:速率,带宽,吞吐量,时延,往返时间,信道利用率2.互联网的组成(边缘部分与核心部分的作用)3.电路交换与分组交换,数据报交换和虚电路交换的特点4.TCP/IP体系结构,数据的封装与解封装第二章 物理层1.信号编码:不归零编码,曼切斯特编码2.影响信号失真程度的因素3.传输介质:双绞线,同轴电缆,光纤(单

mcyuuji的博客 8万+

Java设计模式——工厂模式

本文对设计模式中工厂模式进行思想和原理的讲解,引用实际例子来方便理解。

weixin_56032340的博客 8632

使用electron静默打印

使用electron静默打印 1.使用electron打印的理由 很多情况下程序中使用的打印都是用户无感知的。并且想要灵活的控制打印内容,往往需要借助打印机给我们提供的api再进行开发,这种开发方式非常繁琐,并且开发难度较大。 electron提供的打印api可以非常灵活的控制打印设置的显示,并且可以通过html来书写打印内容。 2.api ele...

w1366352655的博客 945

设计模式之工厂模式

工厂模式 1、简单工厂模式 1.1、定义 简单工厂模式(Simple Factory Pattern)是指有一个工厂对象决定创建出哪一种产品类的实例,不属于23种设计模式。 简单工厂是产品的工厂 1.2、应用场景 简单工厂模式适用于工厂类创建的对象较少的场景,且客户端只需要传入工厂参数,对如何创建对象的逻辑不需要关心。 1.3、缺点 工厂类的职责相对过重,增加新的产品时需要修改工厂类的判断逻辑,违背了开闭原则。 不易于扩展过于复杂的产品结构。 1.4、实例 支付接口规范: public interface

aaa31203的博客 16万+

从符号到基元:Token的技术演化史与“词元”汉化的术语学

中文摘要:Token概念演化与"词元"译名的确立 本文系统梳理了"Token"概念从信息论符号到AI基元的完整演化史,揭示了"词元"这一中文译名确立的必然性。概念发展经历了三个阶段:早期作为编译原理中的词法单元(1960s),统计NLP时期作为概率空间的原子(1990s-2000s),以及神经时代成为动态语义载体(2010s后)。随着Transformer架构兴起,Token从静态符号转变为上下文相关的语义基元,其定义彻底突破"词&quo

AllenLV的博客 1223

YOLO与ORB-SLAM3的结合:实现动态环境下的目标检测与视觉SLAM

摘要: 本文介绍如何将YOLOv5目标检测与ORB-SLAM3视觉SLAM系统结合,实现动态环境下的机器人感知与定位。内容包括:源码下载(集成项目YOLO_ORB_SLAM3)、libtorch安装(PyTorch C++支持)、编译配置(解决路径依赖问题)、ROS环境下的部署(Noetic适配),以及使用TUM数据集的测试流程(RGB-D数据关联与运行)。重点解决编译时Torch路径错误、ROS与Anaconda冲突等问题,并展示系统运行效果。该整合方案为动态场景SLAM提供目标检测能力,未来可优化检测模

FJN110的博客 962

设计模式之【工厂模式】详解

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。

Shine19的博客 1143

linux 基于debian/ubuntu AB系统适配(二)-updateEngine移植

其实A/B系统的原理很简单,大部分的工作都集中在uboot上,rootfs只是起到一个辅助的作用,但这个作用也就必不可少的。你会发现在这个其中并没有kernel的参与。

badbayyj的博客 1033

【设计模式】之工厂模式(三种)

今天给大家介绍23种设计模式中的工厂模式,学过Spring的小伙伴应该不陌生,今天给大家详细介绍一下它。🌈

小杰不秃头的博客 2323

ENVI无法打开Landsat8的头文件问题和解决

再次将txt文件拖入ENVI中,就会得到7个波段组合后的真彩色图像,而且辐射定标所需的参数信息都已经定义好了。按住CTRL+F,查找GROUP = LEVEL1_PROCESSING_RECORD。第一行GROUP = LANDSAT_METADATA_FILE。会查到两个包含的句子,把这两个中间的部分全部删掉。双击打开该xxx_MTL.txt的头文件。删除空行后,应该为如下图的样子。把LANDSAT改为L1。

所有专家都曾始于新手 9702

华为FusionCompute之计算虚拟化

华为FusionCompute之虚拟化

jks212454的博客 2452

设计模式——工厂模式

工厂模式 在《Head First 设计模式》一书中,一共介绍了一种类似于工厂模式的编程习惯、两种工厂模式,在这篇文章中,我将对它们分别进行介绍,下面首先来看一下简单工厂。 1、简单工厂 按照惯例,我们应该先介绍一下简单工厂的定义,然后举例说明,这一次,我们不这样做,我们首先举例说明,然后再引出简单工厂的定义,后续两个工厂模式均按此方式进行叙述,从案例中理解模式的定义才能够更加印象深刻。...

记录只为更好地前行 4883

rknn-toolkit推理yolov5-face.rknn模型--python代码

import os import urllib import traceback import time import sys import numpy as np import cv2 from rknn.api import RKNN ONNX_MODEL = 'yolov5s.onnx' RKNN_MODEL = 'yolov5s.rknn' IMG_PATH = './bus.jpg' DATASET = './dataset.txt' QUANTIZE_ON = True BOX_THR.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 3079

工厂设计模式

简单工厂模式(静态工厂模式)虽然不符合设计原则,但是使用方便,实际使用最多工厂方法模式不修改已有类的前提下,通过增加新的工厂类实现扩展抽象工厂模式不可以增加产品,但可以增加产品族应用场景JDK中Calendar的getInstance方法JDBC中的Connection对象的获取Spring中IOC容器创建管理的bean方法反射中Class对象的newInstance方法。

学习总结 1484

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

《C#设计模式》 工厂三兄弟之 【简单工厂模式】,【工厂方法模式】,【抽象工厂模式】

《C#设计模式》 三种工厂设计模式 【简单工厂模式】 【工厂方法模式】 【抽象工厂模式】 第一种:简单工厂模式 一:【简单工厂模式】 简单工厂模式概念(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简...

TimTiny的博客 2590

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

设计模式之工厂模式与抽象工厂模式

工厂模式和抽象工厂模式 在设计模式里面,我们发现了其实工厂模式贺抽象工厂模式是单独分开的两个设计模式,接下来我们去探索一下他们呢得不同之处叭! 工厂模式的分类: 简单工厂模式 用来生产同一等级结构中得任意产品(对于增加新得产品,需要修改已有代码) 工厂方法模式 用来生产同一等级结构中得固定产品(支持增减任意产品) 抽象工厂模式 围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂得工厂 核心本质 实例化对象不使用new,用工厂方法代替 将选择实现类,创建对象同意管理和控制

qq_43325476的博客 2401

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【设计模式】工厂设计模式

1.简单工厂设计模式 代码 Video package Factory.简单工厂; public abstract class Video { public abstract void product(); } JavaVideo package Factory.简单工厂; public class JavaVideo extends Video { public voi...

codeDonald的博客 222

【iOS】——工厂设计模式

这种模式旨在为创建对象提供一个统一的接口,隐藏了创建对象的具体逻辑,使得客户端不需要知道所创建对象的具体类,从而降低了对象之间的耦合度,提高了代码的灵活性和可维护性。它为创建对象提供了一种灵活的方式,让子类来决定实例化哪一个类,从而实现了对象创建的延迟化和抽象化,增强了代码的扩展性和可维护性。车没了,该车的引擎和轮胎自然也没了。当系统中加入新产品时,不需要修改抽象工厂和抽象产品提供的接口,也无须修改客户端和其他的具体工厂和具体产品,而只要添加一个具体工厂和与其对应的具体产品就可以了,符合了“开-闭”原则。

m0_73974920的博客 1675

设计模式-工厂模式

工厂模式是一种创建型设计模式,用于在不直接指定对象的具体类的情况下,创建对象的实例。工厂模式将对象的实例化过程推迟到子类或工厂类,在运行时动态决定创建哪种对象的实例,以提供更灵活的对象创建机制。

qq_40978488的博客 1957

【深入理解设计模式】 工厂设计模式

工厂设计模式是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建对象的接口。在工厂设计模式中,我们定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

guojiaqi_的博客 1560
上一篇: 【设计模式】单例设计模式
下一篇: 【设计模式】原型模式
梓莘
博客等级 码龄12年 257粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值