设计模式--三种工厂模式

Python DEAP 库深度解析:从基础架构到高级应用 DEAP 是一个基于 Python 的开源框架,专门用于实现和运行各种进化算法,旨在帮助用户轻松地构建和调整进化算法,用于解决各种优化和搜索问题。本节中,介绍了 DEAP 相较于其它进化计算框架的优势,以及 DEAP 中重要的工具 creator 和 Toolbox。 阅读详情

工厂模式

把对类的创建初始化全都交给一个工厂来执行,而用户不需要去关心创建的过程是什么样的,只用告诉工厂我想要什么就行了。而这种方法的缺点也很明显,违背了设计模式的开闭原则,因为如果你要增加工厂可以初始化的类的时候,你必须对工厂进行改建。
示例:
定义一个接口代表形状,然后创建形状接口的实现类,有长方形正方形和圆形。

public interface Shape {
    void draw();
}

public class Ractangle  implements Shape{
    @Override
    public void draw() {
        System.out.println("inside Ractangle::draw() method");
    }
}

public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("inside Square::draw() method");
    }
}

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("inside Circle::draw() method");
    }
}

工厂模式核心是一个Factory类,基于传递给getShape()的对象决定创建的对象类型。

public class ShapeFactory {
    public Shape getShape(String shapeType){
        if (shapeType == null) {
           return null;
        }
        if (shapeType.equalsIgnoreCase("CIRCLE")){
            return  new Circle();
        }
        if (shapeType.equalsIgnoreCase("SQUARE")){
            return  new Square();
        }
        if (shapeType.equalsIgnoreCase("RACTANGLE")){
            return  new Ractangle();
        }
        return null;
    }
}

工厂方法模式

设计一个工厂的接口,你想要什么东西,就写个类继承于这个工厂,这样就不用修改什么,直接添加就行了。就相当于,这个工厂是用来生形状的,而要什么形状要具体分到了每个车间,如果新多了一种形状,直接新增一个形状工厂就行了。
示例:
工厂方法模式给每个类都创建了一个自己的工厂,有新增的时候,新增后再添加对应的工厂即可。(基础形状类省略)

public interface ShapeFactory {
    public Shape getShapeFactory();
}

public class RactangleFactory implements ShapeFactory {
    @Override
    public Shape getShapeFactory() {
        return new Ractangle();
    }
}

public class SquareFactory implements ShapeFactory {
    @Override
    public Shape getShapeFactory() {
        return new Square();
    }
}

public class CircleFactory implements ShapeFactory {
    @Override
    public Shape getShapeFactory() {
        return new Circle();
    }
}

//新增梯形
public class TrapeziumFactory implements ShapeFactory {
    @Override
    public Shape getShapeFactory() {
        return new Trapezium();
    }
}

main方法验证:

public class FactoryMain {
    public static void main(String[] args) {
        Shape circle = new CircleFactory().getShapeFactory();
        circle.draw();
        Shape square = new SquareFactory().getShapeFactory();
        square.draw();
        Shape ractangle = new RactangleFactory().getShapeFactory();
        ractangle.draw();
        Shape trapezium = new TrapeziumFactory().getShapeFactory();
        trapezium.draw();
    }
}
inside Circle::draw() method
inside Square::draw() method
inside Ractangle::draw() method
inside Trapezium::draw() method

抽象工厂模式

抽象工厂模式可以理解为工厂的工厂,用来创建其他工厂。当使用抽象工程模式时,我们首先使用超级工厂创建出工厂然后使用创建出的工厂去创建对象。抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。
示例:
我们上述例子有形状,包含正方形长方形圆形等等,现在我们要创建打印机,包含纸张打印机,网络打印机和屏幕打印机。
形状相关代码不变。

public interface Printer {
    void print();
}

public class PaperPrinter implements Printer {
    @Override
    public void print() {
        System.out.println("PaperPrinter");
    }
}

public class WebPrinter implements Printer {
    @Override
    public void print() {
        System.out.println("WebPrinter");
    }
}

public class ScreenPrinter implements Printer {
    @Override
    public void print() {
        System.out.println("ScreenPrinter");
    }
}

分别创建抽象工厂和对象工厂。

abstract interface AbstractFactory {
    abstract Shape getShape(String shape);
    abstract Printer getPrinter(String type);
}
public class ShapeFactory implements AbstractFactory {
    @Override
    public Shape getShape(String share) {
        if (share == null) {
            return null;
        }
        if (share.equalsIgnoreCase("CIRCLE")){
            return new Circle();
        }
        if (share.equalsIgnoreCase("SQUARE")){
            return new Square();
        }
        if (share.equalsIgnoreCase("RACTANGLE")){
            return new Ractangle();
        }
        return null;
    }

    @Override
    public Printer getPrinter(String type) {
        return null;
    }
}

public class PrinterFactory implements AbstractFactory{
    @Override
    public Shape getShape(String shape) {
        return null;
    }

    @Override
    public Printer getPrinter(String type) {
        if (type == null) {
            return null;
        }
        if (type.equalsIgnoreCase("WEBPRINTER")){
            return new WebPrinter();
        }
        if (type.equalsIgnoreCase("SCREENPRINTER")){
            return new ScreenPrinter();
        }
        if (type.equalsIgnoreCase("PAPERPRINTER")){
            return new PaperPrinter();
        }
        return null;
    }
}

main方法验证:

public class FactoryMain {
    public static void main(String[] args) {
        AbstractFactory abstractFactory = Factorys.getFactory("printer");
        Printer printer1 = abstractFactory.getPrinter("webprinter");
        printer1.print();

        AbstractFactory abstractFactory1 = Factorys.getFactory("shape");
        Shape shape1 = abstractFactory1.getShape("circle");
        shape1.draw();
    }
}
学Simulink--基于电力电子变换器的建模与仿真实例:LLC谐振变换器在高频AC-DC转换中的建模 本文详细介绍了使用Simulink+Simscape Electrical对LLC谐振变换器进行建模与仿真的完整流程。LLC谐振变换器因其高效率、低噪声的特点,广泛应用于高频AC-DC转换场景。文章从背景原理出发,逐步讲解系统结构设计、建模步骤(包括AC源、整流器、LLC变换器、负载等模块搭建)、控制策略实现(固定频率/变频/PID控制)和仿真设置。通过分析仿真结果的关键指标,提出参数整定和算法优化建议。该建模方法为电力电子设计人员提供了实用的仿真工具,有助于优化LLC变换器性能,缩短开发周期。 阅读详情

相关推荐

模糊综合评价模型

一.引子 1.数学归纳法:同高中知识 2.秃子悖论:秃子悖论 这俩个例子都是类似于“量变引起质变”的道理,而在数学中我们把这类问题的性质叫做“模糊性”,在生活中我们也经常能遇到一些模糊的概念,比如年轻、帅、很少很多… 二.概述 模糊综合评价法是一种基于模糊数学的综合评价方法。该综合评价法根据模糊数学的隶属度理论把定性评价转化为定量评价,即用模糊数学对受到多种因素制约的事物或对象做出一个总体的评价。它具有结果清晰,系统性强的特点,能较好地解决模糊的、难以量化的问题,适合各种非确定性问题的解决。——来自百度百

The__Tyche的博客 2万+

设计模式之工厂模式

最近刚做完毕业设计,但回头看看代码,觉得设计不够合理,存在耦合度较高的情况(说白了就是一座屎山)。在写代码的时候很少去考虑该用什么设计模式。所以接下来一段时间会复习一下设计模式的内容。 一、简单工厂模式 1、定义 简单工厂模式并不属于GoF的23种经典的设计模式,但常常作为其他设计模式的基础。定义如下: 简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。 用现实例子距离。一个水果农场,顾客告

qq_43478882的博客 873

三维跨孔电磁波CT数据可视化框架搭建

利用matlab实现对跨孔电磁波CT实测数据反演,并搭建了三维CT数据可视化框架,可装填实测CT反演数据。

Neverlevsun的博客 1167

嵌入式Linux内核移植:硬件认知与交叉编译实战

Linux内核移植是嵌入式系统开发中的核心技术,涉及硬件架构认知、交叉编译工具链配置和设备树机制等关键环节。从处理器特性分析到外设驱动开发,开发者需要深入理解ARM架构的MMU管理、中断控制器工作原理以及设备树语法规范。在工程实践中,合理配置Kconfig选项、优化启动参数以及掌握内存调试技巧,能够显著提升移植效率和系统稳定性。特别是在资源受限的嵌入式场景下,通过CMA内存优化和RT-Preempt补丁等技术手段,可以实现实时性要求严格的工业控制应用。本文以STM32MP157为例,详解从硬件认知到性能调优

weixin_30522183的博客 405

【免费】最新区块链钱包和私钥的助记词碰撞器,使用python开发

最新钱包私钥助记词碰撞器,搏一搏单车变摩托!

weixin_48529185的博客 1万+

【GAMES101】现代计算机图形学入门 资料整理

课程网址 课程主页 包括ppt 课程PPT和视频 一篇搞定!GAMES101现代计算机图形学入门(全) 作业链接地址 作业论坛 GAMES101课程环境搭建(Win10+VSCode) 计算机图形学笔记 虎书pdf 提取:n2rx 【必须】:高等数学(微积分、线性代数)、算法、数据结构 【非必须】:信号处理、数值分析、大学物理(光学) 在线公式编辑器 一定要做作业,如果个人要配置环境的话应该是配置opencv,eigen这两个核心库就行了,目前觉得最核心的一个作业是作业3,实现着色器和渲染管线,做完一遍

ysh的博客 2683

设计模式(四):工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

现在,大家广泛地将工厂模式分为简单工厂模式、工厂方法模式和抽象工厂模式三种。四人帮写的那本设计模式的分类为其中两种:工厂方法(factory method)模式和抽象工厂(abstract factory)模式。这里将三种模式都进行总结。 简单工厂模式:由一个工厂对象决定创建出哪一种具体产品类的实例。简单工厂模式是工厂模式中最简单实用的模式。 工厂方法模式:定义一个创建对象的抽象工厂类,...

ItsWalter的博客 248

Camera 基础知识

Raw Sensor输出的Data格式为Raw,图像的效果处理使用BB端的ISP,BB端接收Raw data后进行一系列的图像处理(OB,Shading,AWB,Gamma,EE,ANR等),效果方面由BB端控制,需要针对不同的模组进行效果调试,Raw sensor是目前的主流,数据量比YUV Sensor小(RAW10 格式的sensor 1个pixel 10个bit)使用平台ISP处理,能支持较大的size。不过,相位对焦并不是那么完美,它对光线的要求就比较高,在弱光拍摄环境下,相位对焦就无能威力了。

手机-手表蓝牙开发工程师的博客 3062

简单工厂创建不同几何图形(Java代码实例)

使用简单工厂模式设计一个可以创建不同几何图形(Shape),如Circle,Rectangle,Triangle等绘图工具类,每个几何图形均具有绘制Draw()和擦除Erase()两个方法;要求在绘制不支持的几何图形时,抛出一个UnsuppShapeException异常,绘制类图并使用Java语言实现。 /** * Description: 抽象产品角色 */ public abstract class Shape { public abstract void draw();

米莱虾 1万+

学Simulink——基于Simulink的单相PWM整流器PI电压外环+电流内环控制建模示例

本文详细介绍了基于Simulink的单相PWM整流器双闭环控制仿真方法。通过电压外环PI控制器调节有功功率生成电流指令,电流内环PI控制器实现正弦电流跟踪,最终达到输出电压稳定(400V±2V)、输入电流THD<3%、功率因数>0.99的目标。文章包含系统架构、数学模型、Simulink搭建步骤(主电路、PI控制器、SPWM调制等)及三种典型工况的仿真验证,并给出电感设计、数字实现等工程实践要点。该方案克服了传统整流器高谐波、低功率因数的问题,为绿色电源开发提供了可验证的仿真模型。

xiaoheshang_123的博客 74

QT实现MQTT服务端(附完整源码)

QT实现MQTT服务端(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1253

一起学Java设计模式--简单工厂模式(不在23中设计模式之内)

(1) 简单工厂模式 使用简单工厂模式设计一个可以创建不同几何形状(Shape)的绘图工具类,如可创建圆形(Circle)、方形(Rectangle)和三角形(Triangle) 对象,每个几何图形都要有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个UnsupportedShapeException,绘制类图并编程实现。 //抽象图形 public

OS4key 3681

100天精通Python(数据分析篇)——第53天:初识pandas模块_基础介绍

一、初始pandas 1. 什么是pandas? 2. 为什么要学习pandas? 3. pandas的优势 4. 下载安装pandas 二、Pandas的数据类型 1. Series 2. DataFrame

努力让自己发光,对的人才能迎着光而来 17万+

三种工厂的设计模式

文章目录一、 三种模式概括1、简单工厂模式2、工厂方法模式3、抽象工厂模式二、三种设计模式的UML类图1、简单工厂模式2、工厂方法模式3、抽象工厂模式三、三种设计模式的源代码四、总结分析 一、 三种模式概括 1、简单工厂模式 实例化对象的时候不再使用 new Object()形式,可以根据用户的选只需要给出具体 实例的描述给工厂,工厂就会自动返回具体的实例对象。择条件来实例化相关的类。 对于客户端...

包包的博客 494

蓝牙模块HM-10手册

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

工厂设计模式(三种)详解

什么是工厂设计模式? 工厂设计模式,顾名思义,就是用来生产对象的,在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则,如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与...

weixin_30246221的博客 3565

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

设计模式—浅析三种工厂模式的特点

前言  简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,并且这三种创建型模式都不需要知道具体类,我们需要掌握的是一种思想,就是在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封装哪里),以适应客户的变动,项目的扩展。   但究竟这三种设计模式有什么异同呢?下面根据这三者之间的特点,优点,缺点,适用范围进行比较,让我们更为清晰直观地理解和区分它们。

小嵩的博客 3041

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

设计模式-三种工厂模式实例

1.简单工厂模式:代替new产生对象,产品的类型比较少时。 我们要获得三种不同的数据库对象,如Mysql,SQLserver,Oracle,它们拥有共同的特征,即可以进行抽象,简单工厂目的是将获得具体数据库实体的任务交给工厂类。 接口DataBase: public interface DataBase { public void open...

aichai7659的博客 241

JAVA设计模式之工厂模式(三种工厂模式)

JAVA设计模式之工厂模式(三种工厂模式)

m0_65260253的博客 2万+

关于三种工厂的设计模式总结

本文总结了三种工厂设计模式的特点与应用场景: 简单工厂模式:通过一个工厂类集中管理产品创建,但违反开闭原则,适合产品类型固定不变的场景。 工厂方法模式:将产品创建下放到具体工厂类,符合开闭原则,适合需要频繁扩展产品类型的场景。 抽象工厂模式:支持创建产品族(成套相关产品),保证产品生态一致性,适合需要强约束产品配套关系的场景。 选择依据在于平衡复杂度与扩展性:简单工厂适合轻量级需求,工厂方法便于扩展新产品类型,抽象工厂则适用于成套产品的生产管理。

qq_61875563的博客 873

设计模式 三种工厂模式(Factory)

三种工厂模式 工厂模式可以分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单...

不自律不成魔 静心 精进 349

Java设计模式:三种工厂模式

详细分类: 简单工厂模式(静态工厂模式); 工厂方法模式; 抽象工厂模式 一、简单工厂模式 在介绍简单工厂模式之前,先来假设一下: 我们作为顾客,我们需要得到书这样一个物品。 于是,我们写出以下代码: public interface Book { public void typeOfBook(); } class EnglishBook implements Book{ @...

JohnsonChin的博客 470

工厂设计模式-三种实现方式

工厂设计模式-三种实现方式工厂设计模式说明一、简单工厂模式 Simple Factory1.1案例代码二、工厂方法模式 Factory Method2.1案例代码三、抽象工厂模式 Abstract Factory3.1案例代码 工厂设计模式说明 一、简单工厂模式 Simple Factory 简单工厂模式没有被归类到常见23种设计模式中,此处主要是和工厂方法、抽象工厂对比,方便理解 1.1案例代码...

cs4380的博客 707

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

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

小杰不秃头的博客 2323

一文小结设计模式之工厂模式(Java实现三种)

设计模式之工厂模式简单工厂引入简单工厂UML扩展小结工厂方法引入工厂方法UML小结抽象工厂引入抽象工厂UML小结 工厂方法是常用的创建型模式之一,其主要核心是将对象交由工厂去实例化,我们只需要通过工厂去获得该我们想要的实例即可。本文简单描述三种工厂模式,但是简单工厂模式并不属于23种设计模式之一,其作为一个铺垫可以更好的理解工厂方法和抽象工厂两种设计模式。 简单工厂 我们先来看最原始的工厂模式,也就是简单工厂。其通过传入的字符参数不同来对应生产不同的实例,而工厂通过大量的if...else来对我们传入的字符

a760352276的博客 2422

剖析java三种工厂设计模式

java三种工厂设计模式 1. 简单工厂模式 简单工厂有以下三个主角: Factory:工厂负责生产产品 AbstructProduct:抽象产品,就好比华为手机,我没说是华为那个型号手机。 Product:具体产品,就比如华为mate50。 我想要华为mate50手机,那华为mate50手机首先是华为手机,华为手机有什么功能就在下面接口写了。 public interface HuaweiiPhone { void call(); } 华为手机有mate50、p40、荣耀等等很多个手机,那我

qq_41861216的博客 1813

设计模式-三种工厂模式的优缺点和使用场景

通过简单的例子讲述清楚简单工厂模式,方法工厂模式,抽象工厂模式的差异,梳理它们的优缺点以及使用场景

蒋大钊的博客 4134
上一篇: Spring Boot整合Zookeeper实现配置中心
下一篇: 设计模式--单例模式
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值