简单理解常用设计模式(一)简单工厂-附加UML解释

设计模式笔记2-简单工厂模式(带有自制UML类图) 2.简单工厂模式 来看一个订购面包的实例 1)面包的种类很多,(ButterBread, Toast...) 2)制作过程,(prepare, bake, pack) 3)完成面包的订购功能 2.1 原来的方法 思路: 需要用到的类,Bread抽象类,ButterBread,Toast具体的实现类,OrderBread面包的订购类 具体实现,在OrderBread中完成对不同种类面包的订购 UML类图... 阅读详情

记得去年看了一遍大话设计模式,很有感触,现在再看第二遍,又收获良多,这里记录一下自己的理解。

注:语言为java

一、简单工程模式

根据套路来,假如面试官让你设计一个计算器,你会怎么写代码,能加减乘除即可,自己写一套再往下看吧。

新嫩一般就是直接开干,这点我也是,也很喜欢能立马动手这种精神,但结果往往不太理想。

于是代码结果可能就是在一个类里,一个main方法解决问题。

然后仔细想想?哦,耦合太高了,得解耦,至少调用类和运算类要分开,于是第二次结果就是这两个类。

接着再想想?调用方如果希望增加新的运算方法,怎么扩展,直接在运算类里添加?no,no,这可不安全,修改代码的家伙也许一时手贱修改了源码呢!

所以,每个运算功能都分开吧,改为加法类,减法类,乘法类,除法类,然后都去继承运算类,新添什么运算只要继承父类即可。

嗯,似乎完美了,现在还需要解决的就是调用问题,必须只给出获得结果的方法,不能让人直接调用具体的运算方法(不然就暴露了,也显得麻烦了),所以前辈想出了简单工厂模式!

调用类如下:

package com.gcc.factoryModel;

/**
 * 简单工厂模式:解决对象创建问题,根据某个条件实例化所需的对象
 *
 */
public class TestOperation {

	public static void main(String[] args) {
		Operation operadd = OperationFactory.createOperation('+');
		Double result1 = operadd.getResult(4.0,5.0);
		System.out.println("Operation加法结果为:"+result1);
		
		Operation opersub = OperationFactory.createOperation('-');
		Double result2 = opersub.getResult(4.0,5.0);
		System.out.println("Operation减法结果为:"+result2);
		
		Operation opermul = OperationFactory.createOperation('*');
		Double result3 = opermul.getResult(4.0,5.0);
		System.out.println("Operation乘法结果为:"+result3);
		
		Operation operdivi = OperationFactory.createOperation('/');
		Double result4 = operdivi.getResult(4.0,5.0);
		System.out.println("Operation除法结果为:"+result4);
	}
	
}

工厂类如下:

package com.gcc.factoryModel;

public class OperationFactory {

	public static Operation createOperation(char operation) {
		Operation oper = null; 
		switch (operation) {
		case '+':
			oper=new OperationAdd();
			break;
		case '-':
			oper=new OperationSub();
			break;
		case '*':
			oper=new OperationMul();
			break;
		case '/':
			oper=new OperationDivi();
			break;
		default:
			break;
		}
		return oper;
	}
	
}

运算类以及子类如下:

package com.gcc.factoryModel;

public abstract class Operation {
	public abstract Double getResult(Double numberA,Double numberB);
}
package com.gcc.factoryModel;

public class OperationAdd extends Operation {

	@Override
	public Double getResult(Double numberA,Double numberB) {
		Double result=numberA+numberB;
		return result;
	}
	
}
package com.gcc.factoryModel;

public class OperationSub extends Operation {

	@Override
	public Double getResult(Double numberA,Double numberB) {
		Double result=numberA-numberB;
		return result;
	}
	
}
package com.gcc.factoryModel;

public class OperationMul extends Operation {

	@Override
	public Double getResult(Double numberA,Double numberB) {
		Double result=numberA*numberB;
		return result;
	}
	
}
package com.gcc.factoryModel;

public class OperationDivi extends Operation {

	@Override
	public Double getResult(Double numberA,Double numberB) {
		Double result=null;
		if(numberB!=0.0){
			result=numberA/numberB;
		}
		return result;
	}
}

简单工厂的巧妙就在于,在调用方是完全不用关心底层是怎么实现的,只要关心我需要哪个功能的对象,再使用这个对象的方法即可,回顾想想,是不是在开发中也会经常遇到人家写好的工厂类。

这里再补充一下java基础,运算类的运算方法设计为抽象方法,这样继承这个类的子类就必须实现这个方法,当然也可以改为运算接口。

工厂生成对象方法为静态方法,这样调用时候就可以直接类名.方法名

下面附上原书的UML图:



另外附上UML图的常见内容以及解释:



矩形框:表示类,类图分三层,+号表示public,-号表示private,#号表示protected

矩形框带interface的,表示接口图;另一种表现方式就是加棒棒糖,如上图唐老鸭接口

空心三角形加实线表示继承关系

空心三角形加虚线表示实现接口

箭头加实现表示关联关系,即一个类知道(实例化或调用方法)另一个类

空心的菱形加实线箭头表示聚合关系,聚合的意思是整体和部分的关系,是可以分割的,如上图大雁和雁群,大雁可以属于雁群A也可以属于雁群B,这是大雁个体的自由,大雁和雁群的生命周期也不同

实心的菱形加实线箭头表示组合关系,组合的意思是强的整体和部分的关系,不可分割,如上图的鸟和翅膀;再解释两端的数字,叫做基数,表面一段的类可以有几个实例。

虚线箭头表示依赖关系,依赖表示类内某个方法(功能),必须要使用其他的对象(类),如上图动物的新陈代谢方法必须要氧气和水


【python】简单工厂模式 【python】简单工厂模式。抽空学习下常见的20几种设计模式,python2.7来设计实现。希望能坚持下来全部介绍完。 阅读详情

相关推荐

掌握23种设计模式:UML图形实战指南

设计模式与统一建模语言(UML)是软件工程中非常重要的概念。设计模式提供了一种通用的、经过验证的解决方案,用于处理软件设计中常见的问题。它们是一套被多数人认可的最佳实践,用于编写可复用且易维护的代码。另一方面,UML则是一种用于软件系统设计的标准语言,它通过图形化的表示方法帮助开发者可视化系统的结构和行为。设计模式是一套被广泛认可的、在特定情况下解决常见软件设计问题的方法。它们不仅能够提升代码的复用性,还能提高系统的可维护性和扩展性。

weixin_33628677的博客 899

设计模型之工厂模式(含UML完整实例)

设计模型之工厂模式 1.工厂模式 1.1 定义   一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。   工厂方法模式的主要优点有: 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程; 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;   工厂方法模式的缺点是:每增加一个产品就要增加一个具体产...

atu1111的博客 5595

DDR内存设计必看:DFI接口协议详解与实战避坑指南(附时序图解析)

本文深入解析了DDR内存设计中连接内存控制器与物理层的DFI接口协议,聚焦于DDR4/DDR5设计的实际痛点。文章详细阐述了协议版本兼容性、时钟架构(匹配频率与频率比系统)、PCB信号完整性设计以及上电初始化与调试等关键环节,为硬件工程师提供了一套从理论到实战的完整避坑指南,并附有时序图解析以助理解。

weixin_29256771的博客 330

设计模式---工厂模式

工厂模式的简要介绍

开心博客 1159

SAP PP未清生产订单关闭物料退料、新工单发料批量处理

( werks = '1001' lgort = 'A004' lgobe = '组装-成品组装' )( werks = '1002' lgort = 'C006' lgobe = '组装-二车间' )( werks = '1002' lgort = 'C007' lgobe = '组装-二车间' )( werks = '1001' lgort = 'A007' lgobe = '组装-MS' )( werks = '1001' lgort = 'A008' lgobe = '组装-GW' )

dingqing86的专栏 1192

Agent Skills:AI智能体规模化落地的基础设施

摘要:AgentSkills体系已成为AI智能体落地的核心基础设施,解决了能力扩展和行业知识沉淀两大核心难题。该开放标准通过语义优先、渐进式披露等设计原则,实现了工具调用的标准化和可控化,同时支持轻量化知识沉淀。Skill作为最小能力单元,将传统软件功能、行业知识等封装为可被智能体调用的标准化模块,推动了软件产业从"工具时代"向"智能体时代"的范式变革。目前该体系已被主流Agent工具广泛兼容,形成完整生态,未来将持续演进,进一步降低落地门槛,推动AI原生转型。

技术引领业务创新 1158

UML类图及工厂

UML类图、工厂模式,抽象工厂、简单工厂、工厂方法

qq_62086657的博客 3936

AgentScope实战指南:从源码解析到Qwen模型的多Agent协作开发

本文提供了AgentScope多智能体开发框架的实战指南,详细解析了其核心架构与工作原理,并展示了如何利用Qwen模型构建从单智能体对话到多智能体协作的完整应用。通过两个具体代码实例,指导开发者快速上手环境配置、模型接入与智能体编排,实现高效的多Agent系统开发。

ff678的博客 640

设计模式——第一章工厂模式

设计模式 一、7大设计原则 1.1 单一职责原则 ​ 一个对象应该只包含单一的职责,并且该职责被完整的封装到一个类中 1.2 开闭原则 ​ 软件实体应该对扩展开放,对修改关闭 1.3里氏替换原则 ​ 所有引用基类的地方必须能透明的使用其子类对象 1.4依赖倒转原则 ​ 高层模块不应该依赖底层模块,他们都应该依赖抽象,抽象不应该依赖细节,细节应该依赖于抽象 1.5 接口隔离原则 ​ 客户端不应该依赖他那些不需要的接口 1.6 合成复用原则 优先使用对象组合,而不是通过继承达到复用的目的 1.7 迪米

小超的博客 406

ADS2023实战:2.4GHz超外差接收机从设计到链路预算全流程解析

本文以ADS 2023软件为平台,详细解析了2.4GHz超外差接收机从核心指标定义、架构原理到完整链路搭建与仿真的全流程。通过实战演练,重点阐述了如何利用ADS进行谐波平衡仿真和链路预算分析,以量化评估系统增益、噪声系数等关键性能,为射频工程师提供了一套从理论到仿真的系统级设计方法。

herb5的博客 817

使用Intel编译器编译OpenFOAM

本文总结了使用INTEL编译器编译OpenFOAM的过程

姜蜉蝣的博客 1547

2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图、及代码演示

经学习于多位网上大佬并结合自己的感悟和理解,本文简述了各大设计模式,并通过UML和代码详细说明了创建型模式: ①简单(静态)工厂:升级版本,再升级版本,多方法工厂共四种实现方式。 ②工厂方法 ③抽象工厂 ④单例模式:饿汉式、懒汉式、加锁懒汉式、DCL单例----双重锁高性能(面试重点!)、静态内部类、枚举单例、升级版静态内部类、容器式单例、ThreadLocal单例共九种实现方式。 ⑤原型模式:浅拷贝和深拷贝 ⑥建造者模式:传统的build模式和build模式变种...

qq_41889508的博客 12万+

三菱PLC通信库大比拼:手把手教你用C#实现最高效的McProtocol数据读写

本文深入比较了三菱PLC通信库的性能,重点介绍了如何使用C#高效实现McProtocol数据读写。通过实测数据对比HslCommunication、McProtocol-next和自定义方案的优劣,提供优化技巧和代码示例,帮助开发者在工业自动化场景中提升通信效率。

m0n1o2p的博客 255

C++设计模式 - 简单工厂,工厂方法和抽象工厂

知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达! 目录 如果需要录屏资料,请私信邮箱shitou3000@qq.com获取。 ...

大秦坑王的专栏 2553

工业自动化实战:用LabVIEW的DSC模块实现MODBUS-TCP设备控制

本文详细介绍了如何利用LabVIEW的DSC模块实现工业自动化中的MODBUS-TCP设备控制。通过环境准备、核心功能解析、状态机实现及典型工业场景实战,帮助工程师快速掌握稳定可靠的通讯技术,提升工业自动化系统的运行效率。

salt9的博客 1057

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

设计模式C++实现(1)——工厂模式

工厂模式属于创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。

wuzhekai的专栏 17万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

UML:建模简单工厂模式_uml工厂模式v3

通过UML建模,我们可以更清晰地理解简单工厂模式的结构和工作原理。这不仅有助于我们更有效地实现该模式,还能让团队成员更容易地理解和维护代码。简单工厂模式是一种非常实用的设计模式,值得在合适的场景下使用。希望本文能帮助大家更好地理解和应用简单工厂模式和UML建模。如果你有任何问题或建议,欢迎在下面留言。为了做好运维面试路上的助攻手,特整理了上百道【运维技术栈面试题集锦】,让你面试不慌心不跳,高薪offer怀里抱!这次整理的面试题,

m0_60721649的博客 951

深度学习工具包 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")

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

23种设计模式UML类图图解

目录一 、类图的表示二、创建者模式1、单例模式2、简单工厂模式3、工厂方法模式4、抽象工厂模式5、原型模式6、建造者模式三、结构型模式1、代理模式2、适配器模式3、装饰者模式4、桥接模式5、外观模式6、组合模式7、享元模式四、行为型模式1、模板方法模式2、策略模式3、命令模式4、职责链模式5、状态模式6、观察者模式7、中介者模式8、迭代器模式9、访问者模式10、备忘录模式11、解释器模式 一 、类图的表示 本文的图参考黑马程序员,在UML类图中,类使用包含类名、属性(field) 和方法(method)

weixin_622464的博客 8704

UML:建模简单工厂模式

简单工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在简单工厂模式中,当创建某个对象时,不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。通过UML建模,我们可以更清晰地理解简单工厂模式的结构和工作原理。这不仅有助于我们更有效地实现该模式,还能让团队成员更容易地理解和维护代码。简单工厂模式是一种非常实用的设计模式,值得在合适的场景下使用。希望本文能帮助大家更好地理解和应用简单工厂模式和UML建模。如果你有任何问题或建议,欢迎在下面留言。

十年运维开发经验的王义杰在此分享自己的知识和经验 685

工厂模式以及应用简单解释

一个jpa引发的血案,项目中应用的jpa比较多,自己看了关于jpa相关的应用,然后打算了解一些源码,但是不太能看懂。想知道为什么在jpa中定义了方法,就能够操作数据库,不定义方法也能操作数据库,资料上说应用的代理设计模式,自己看过一些设计模式,但是并没有太理解。自己又着重看了看代理设计模式,好像还是看不懂,然后跟身边的一个大神,大学的好哥们交流,咨询了一下,代理模式的实现原理。在学技术的时候我走入...

jtracydy的博客 2622

设计模式总结一(UML类图、简单工厂模式、策略模式和单一职责原则)

前言 我写这篇博文,是对我研一这一学期到现在,学习设计模式的总结。我自己使用的是程杰写的《大话设计模式》这本书,我会跟据这本书,对自己这么多天学习到的知识做一个总结。 目前,第一篇先总结前三章。涉及到的只是有:第一章讲述的UML类图和简单工厂模式,第二章的策略模式和第三章的单一职责原则。首先,先来看第一章地1.11节的UML类图。 UML类图 类图 类图分为三层,第一层是类名;第二层是类特性,即类成员;第三层则是列操作,即类的成员函数。其中,+表示public,-表示private...

My Struggle 1409

设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)

工厂模式(Factory Pattern)是一种创建型设计模式,旨在提供一种统一的方式来创建对象,将对象的实例化过程封装在一个单独的类中。工厂模式通过定义一个公共的接口来创建对象,但允许子类决定实例化哪个类。这样可以将对象的实例化与客户端代码的耦合度降到最低,同时也提供了一种可扩展的方式来创建对象。

qq_45929019的博客 1724

C#之三十八 简单工厂设计模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例

张晨光老师的播客 4041

23种设计模式模式详解 Java UML类图小知识(一)

23种设计模式模式详解 Java UML类图小知识(一)设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式的好处:代码的可重用性、可扩展性,可阅读性,保证代码的可靠。(代码要优雅)关于相关源码可以在GitHub上下载: https://github.com/rickey17/design 设计模式的6大原则 设计模式分类 创

rickey17的博客 8262

Java设计模式之工厂模式----简单工厂?抽象工厂?工厂方法?

一.我们说的设计模式指什么? GoF(Gang of Four):是四个人的代号。 《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,199...

atomatom98的博客 297

简单工厂Pk工厂方法

工厂,顾名思义就是用来生产产品的地方。而在设计模式中提到的工厂是什么意思呢?设计模式中提到了三种工厂模式:简单工厂模式、抽象工厂模式、工厂方法模式,他们有什么共同点和区别呢?下边就来总结一下设计模式中的工厂家族 1 简单工程模式 1.1定义: 简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod

当一堆用不熄灭的柴火 2283
上一篇: SpringBoot-结合thymeleaf和mybatis案例
下一篇: 简单理解常用设计模式(二)策略模式
gcc_front
博客等级 码龄9年 16粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值