1. 简单工厂设计模式

设计模式(C++) 练习1 简单工厂模式 设计模式(C++)—简单工厂模式 一个农场专门负责种植各种水果,比如苹果、草莓、葡萄等,任何水果都可以种植、生长和采摘.此外,每一种水果还有自己的特性,如:苹果是多年生具有树龄的属性,葡萄则分为有籽或无籽等。农场生产的水果都送入超市进行销售。请采用简单工厂模式对上述问题进行建模要求画出类图并使用C++语言编写程序。 /** * @author 墨晓柯 * / #include<i... 阅读详情

简单工厂设计模式

简单工厂设计模式: 解决集中创建对象的问题就称为简单工厂设计模式。

优点:当子类没有确定:类名、参数频繁变化的时候,只需要修改工厂类一处即可,整个改动是最少的


步骤:

1.属性的封装:

定义各个类的私有属性,设计getXXX()和setXXX()方法

	
	private String name;
	private String address;
	private int id;
	private char sex;

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}

2.各个类中添加构造函数

//员工类
public class Employee {
	public Employee() {
	}
	public Employee(String name,String address,int id,char sex) {
		this.name = name;
		this.address = address;
		this.id = id;
		this.sex = sex;
	}
}

//Pg员工类
public class PgEmployee extends Employee{
	private int bugNumber;
	public PgEmployee() {
		
	}
	public PgEmployee(String name,String address,int id,char sex,int bugNumber) {
		super(name,address,id,sex);
		this.bugNumber = bugNumber;
	}
}

//Se员工类
public class SeEmployee extends Employee {
	private int designNumber;

	public SeEmployee() {

	}
	public SeEmployee(String name, String address, int id, char sex, int designNuber) {
	super(name,address,id,sex);
	this.designNumber = designNuber;
	}
}

3.创建一个工厂类xxxFactory

public class EmployeeFactory {
	public static Employee createEmployee(String name, String address, int id, char sex, int designNuber,int bugNumber,char type) {
		Employee employee = null;
		switch (type) {
		case 'P':
			employee = new PgEmployee(name, address, id, sex, bugNumber);
			break;
		case 'S':
			employee = new SeEmployee(name, address, id, sex, designNuber);
			break;
		}
		return employee;
	}
}

4.在工厂类中 编写创建对象的方法:

  • 1、方法的返回值是父类类型
  • 2、方法的参数,包括所有子类需要的所有参数,额外 char type:创建哪个子类对象
  • 3、判断类型,创建对象
  • 4、返回父类类型

5.main方法

public  class Test01 {

	public static void main(String[] args) {
		
		Employee[] employees = new Employee[10];
		Employee pgEmployee = EmployeeFactory.createEmployee("张三", "山西", 123, '男', 0, 6, 'P');
		Employee seEmployee = EmployeeFactory.createEmployee("李四", "陕西", 456, '女', 8, 0, 'S');
		Ceo ceo = new Ceo();
	
		employees[0] = pgEmployee;
		employees[1] = seEmployee;
		
		for (Employee employee : employees) {
			if (employee != null) {
				if (employee instanceof PgEmployee) {
					//如果是PgEmployee类,将父类强转为子类
					PgEmployee pgEmployee1 = (PgEmployee)employee;
					ceo.listen(pgEmployee);
					System.out.println("工号:"+pgEmployee1.getId()+",姓名:"+pgEmployee1.getName()+",住址"+pgEmployee1.getAddress()+",性别"+pgEmployee1.getSex()+",bug数量:"+pgEmployee1.getBugNumber());
				}else if (employee instanceof SeEmployee) {
					SeEmployee seEmployee1 = (SeEmployee)employee;
					ceo.listen(seEmployee);
					System.out.println("工号:"+seEmployee1.getId()+",姓名:"+seEmployee1.getName()+",住址"+seEmployee1.getAddress()+",性别"+seEmployee1.getSex()+",设计数量"+seEmployee1.getDesignNumber());
				}
			}
		}
	}

}

保姆级教程:用MATLAB搞定双目相机标定,从导入图片到参数解读全流程 本文提供了一份详细的MATLAB双目相机标定全流程指南,涵盖从图片准备到参数解读的每个环节。重点讲解了棋盘格选择、拍摄技巧、MATLAB工具箱设置及参数优化,帮助读者避免常见错误并提升标定精度。特别适合机器人导航、三维重建等领域的开发者。 阅读详情

相关推荐

Open3D:Win10 + VS2017配置Open3D(C++、python)

一、下载源码 地址:https://github.com/intel-isl/Open3D 1.1 克隆源码【笔者的源码路径为D:\Open3D\Open3D】 1.2 切换版本【笔者的版本为0.8.0】 1.3 更新子模块【用于获取第三方库!很重要!】 二、CMake编译 2.1 设置路径 【source code: D:\Open3D\Open3D;build binaries: D:\Open3D】 【笔者设置CMAKE/CMAKE_INSTALL_PREFIX的路径为D:/Open.

累了就要打游戏 1万+

c#设计模式--委托工厂

(转载请注明来源:cnblogs coder-fang) 1。下面是一个简单而又典型的工厂方法: public static Employee CreateEmployee(string name) { if (name.StartWith("VIP")) { return new Employee()...

didigui1108的博客 387

AI 编程助手新玩法:用 Claude Code 一键调用国产大模型(DeepSeek/Kimi/GLM 对比)

本文深入评测了Claude Code与三大国产大模型(DeepSeek、Kimi、智谱GLM)的集成效果,详细对比了它们在代码生成质量、响应速度和特殊场景支持度等方面的差异。通过实测数据和实战技巧,帮助开发者选择最适合的AI编程助手组合,提升开发效率。

weixin_30955617的博客 485

设计模式【1】简单工厂模式

简单工厂设计模式思想代码算法基类加法减法运行总结 思想 简单工厂设计模式就是为了能够根据不同情况动态获取到需要的类型 在本次将会演示一个计算器的功能 我们无法知道用户在程序中会输入哪些字符,是±*/或者其他,但是我们能确定的是用户需要通过输入将两个值进行运算,得到一个返回结果。 那么在此处我们就可以创建一个算法基类,有设置值并计算后返回值的方法,值1与值2两变量。 然后加减乘除类继承该类,在运行程...

weixin_36464906的博客 371

保姆级教程:在阿里云ECS上用Docker一键部署EMQX MQTT服务器(Ubuntu 20.04)

本文提供在阿里云ECS上使用Docker一键部署EMQX MQTT服务器的详细教程,涵盖从实例创建、Docker环境配置到EMQX部署与优化的全流程。适合物联网开发者快速搭建高效、安全的MQTT消息服务器,适用于智能家居、工业物联网等场景。

weixin_28739079的博客 308

Vivado IP核综合失败别慌:除了打补丁,这个TCL命令也能救急(以Video Frame Buffer为例)

本文详细解析了Vivado IP核综合失败的排查方法,特别是针对Video Frame Buffer Read IP的常见问题。从补丁安装到深入分析DCP文件生成机制,再到使用强大的TCL命令`foreach ip_in_proj [get_ips] {compile_c [get_ips $ip_in_proj]}`强制重编译,提供了一套完整的解决方案。帮助开发者快速定位并解决IP核综合失败问题,确保项目顺利进行。

weixin_30892889的博客 422

【设计模式系列1】深入分析简单工厂,工厂方法和抽象工厂三种设计模式

深入分析工厂设计模式 简单工厂设计模式(Simple Factory Pattern) 指的是由一个工厂对象来决定创建出哪一类产品种类的实例。简单工厂模式适用于工厂类负责创建较少对象的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。 工厂方法设计模式 抽象工厂模式 ...

zwx900102的博客 3399

PCB布局规范及其注意事项(纯干货)

这样做的好处是信号1,3层不会有串扰,4和5作为电源有紧密的耦合,3个信号层都有GND平面可以参考,且不会互相产生串扰,唯一的缺点是布线的层面只有3个信号层(信号03的是最适合来传输高速信号,因为该层的二面都有屏蔽,防止干扰传出,也防止干扰传入)33、影响阻抗匹配的参数(ER介电常数(1GHZ以下默认为4.2,以上的话问板厂),H介质厚度(就是内层压合的PP片厚度),W走线的线宽,T走线的厚度(铜厚/减小线的厚度可以增大阻抗))我这里使用的是CITS25来计算阻抗。

qq_42379138的博客 8839

设计模式1.【简单工厂】

以上就是我们使用【简单工厂】这种设计模式,实现了商超促销活动的消费计算案例。 喜欢本篇文章的话,可以留个免费的关注呦~~~

casually的博客 562

MicroCap声学仿真介绍(五)-倒相管扬声器系统仿真

实际倒相管的扬声器单体选择、后腔容积、倒相管的直径和长度都是需要精心挑选的,为了便于演示,随意指定了倒相管的长度和直径,现实中还是不能这么随便的。之前介绍了封闭式扬声器的仿真,今天在封闭式扬声器的基础上,再介绍一下倒相管扬声器系统的仿真。

山无忧的博客 1716

混响效果的编程实现:Schroeder混响模型与Moorer型混响

Schroeder混响模型是由Manfred R. Schroeder在1962年提出的,它基于一系列串联的反射器(Allpass Comb Filters)和并联的反射器(Feedback Comb Filters)构成。Schroeder混响模型是由Manfred R. Schroeder在1962年提出的,它基于一系列串联的反射器(Allpass Comb Filters)和并联的反射器(Feedback Comb Filters)构成。通过调整各个反射器和全通滤波器的参数,可以实现不同的混响效果。

2301_79326857的博客 1081

设计模式-1(简单工厂与抽象工厂)

如果后续需求变复杂(比如外卖平台要区分“普通订单”和“会员订单”,且会员订单有额外折扣),你觉得现在的简单工厂模式还够用吗?如果不够,应该怎么优化?设计一个支持“暗黑主题”和“亮色主题”的组件工厂,每个主题需包含“按钮(Button)”和“输入框(Input)”两种组件,且组件样式与交互匹配主题。但问题来了:每次创建员工,都要手动判断“他是程序员还是产品”,再选对应的构造器——500个员工要判断500次?抽象工厂的本质是“用抽象类约定产品族的生产规则,具体工厂实现规则”,解决简单工厂的耦合问题。

weixin_67448099的博客 1万+

uniapp ios原生插件开发 (framework,cocoapods)

已知UniApp的插件开发方式有两种, 第一种 Xcode Framework的方式,这种方式是官方指定的方式。 这种方式的优点就是简单直接, 但也有不足,比如当插件需要引入一些三方库时,操作起来就不是那么方便。 而使用Cocoapods则可以很方便的引入三方库。 接下来,本文探索使用Cocoapods的方式来进行UniApp插件开发。

Rey的技术博客 9822

设计模式1:简单工厂

从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

永不言弃01 792

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

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

深度学习工具包 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——简单工厂模式

设计模式之简单工厂模式 1.首先,我们先确认需求 实现一个计算器,用户通过输入两个数和和一个运算符号,然后输出结果。 2.设计UML类图 3.代码实现 Operation运算类 、、、java `public class Operation { protected double numberA=0; protected double numberB=0; public double getResult() throws Exception { double result=0; return result

hjw0505521的博客 327

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

设计模式1--简单工厂

1、什么是设计模式:   引用百度:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。   简单工厂模式属于创建型模式,又叫做静...

ainuanwei5320的博客 132

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C#设计模式之1——简单工厂模式

本人最近学习C#设计模式,所以把自己学到的东西写出来和大家分享一下。关于C#的设计模式将会有一个专题来写。   在OO编程中最常用到的一个模式就是简单工厂(Simple Factory)模式。 简单工厂模式根据提供的数据或者参数返回几个可能的类中的一个实例,说通俗点有点像面向对象编程中的多态性,一个基类,有多个派生类,在另外的调用程序中,根据参数来决定返回这个基类的哪个具体的派生类,返回值为

Work Hard, Play Harder! 1万+

1、设计模式之简单工厂模式

问题描述:近期需要学习UML基础知识和23种设计模式相关知识,因此简单记录一下~ 简单工厂模式实现及整理实现,基本原理参考: https://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/simple_factory.html#id2 https://www.runoob....

sxj731533730 430

设计模式1-简单工厂

定义 工厂类通过不同的参数返回不同的实例对象。 有三要素:工厂类,实例父类,和实例子类。 简单工厂模式简单来说就是通过参数创建对象的一种方式。 特点 1. 工厂类是一个单例 2. 实例对象继承同一个父类,通过一个虚函数去实现自己业务 3. 很好的体现了封装继承和多态,使业务代码逻辑松耦合。 缺点 工厂类集成了所有实例对象的逻辑,不宜扩展,负担过重,但是可以考虑通过配置文件优化。 ...

qq_29067097的博客 190

《设计模式入门》 1.简单工厂模式

简单工厂模式(Simple Factory Pattern)不属于GoF 23种设计模式,我们通常将它作为学习其他工厂模式的入门。是由一个工厂对象决定创建出哪一种产品类的实例。简单来说就是我们抽取一个产品的大类,用具体的产品继承大类并且实现具体的方法。 简单工厂模式一般抽象为三个板块: 1.工厂类 工厂类是简单工厂模式的核心,一般由一个具体的Java类进行实现,工厂类会在客户端的调用下创建具体的产品对象。 2.抽象类 抽象类一般都是产品类的父类,或者是共同拥有的接口,可以使用一个...

PigeonEssence的博客 502

1【大话设计模式】简单工厂模式

最近空闲时间想学习一下设计模式,之前读书的时候其实有这门课程,但是怎么说呢,上学的时候是当任务在学,感觉设计模式莫得卵用,随着工作的深入,渐渐发现设计模式的重要性,也许我们写代码不用设计模式也能运行,但是设计模式能帮助我们让代码更tm好,主要是需求一直在变,我们写代码要考虑扩展性什么的。。。 说到设计模式,之前其实也学过好几次,每次都是从入门到放弃(希望这次能多看完),主要这个过程比较枯燥。...

tian2342的专栏 306

设计模式1——简单工厂

简单工厂1. 什么是简单工厂简单工厂模式属于类的创建型模式,又叫做静态 工厂方法模式。通过专门定义一个类来负责创建 其他类的实例,被创建的实例通常都具有共同的 父类。定义一个Fruit接口public interface Fruit { /* * 采集 */ public void get(); }定义一个Apple类实现Fruitpublic class

lpp5422lp的博客 311

【设计模式】1.简单工厂、工厂、抽象工厂模式

以下是简单工厂模式工厂方法模式和抽象工厂模式核心思想:创建一组相关或依赖的对象(产品族),而不需指定具体类。适用场景:需要创建多个系列的产品(如跨平台的 UI 组件)。# 抽象产品族passpass# Windows 产品族return "Windows 按钮"return "Windows 复选框"# Mac 产品族return "Mac 按钮"return "Mac 复选框"# 抽象工厂passpass# 具体工厂# 使用print(f"

胡侃有料的博客 934

设计模式-1 简单工厂设计模式

简单工厂不是一个标准的设计模式,但是他太常用,有简单,所以这是第一个热身运动 接口回顾 Java接口的概念: java接口是一种特殊的抽象类,跟一般抽象类相比,接口里面的所有方法都是抽象方法,接口里面的所有方法都是抽象,所以属性都是常量.也就是说,接口只有方法定义而没有实现;用处 定义实现类的外观,约束实现类的行为.接口相当于一份契约,根据外包应用需要的功能,约定实现类应该要实现的功能.接口

qianyedoufulao的博客 3035

设计模式回顾 1—简单工厂模式

1、简单工厂模式:在业务逻辑中,通过参数控制实例化哪个类,从而将不同的业务分离,方便后期增加业务类型。 2、简单工厂模式一般创建工厂类(static方法),调用工厂实例化不同的子类对象,以多态返回相同父类的形式,调用子类中相同的方法,实现不同的业务 举例说明,汽车灯光,灯光控制系统就是一个工厂,管理远光灯,近光灯,转向灯,刹车灯,雾灯,双闪等,他们有一个共同点都是灯,但是灯光以及作用却不一样,各种灯光可以看做是不同的实例,不同的灯对应的开关,就是调用工厂类时需要传入的参数。 3、实例操作 (1)创建灯..

迷糊之路 272

设计模式1(简单工厂、工厂、单例模式

一、简单工厂 /** * 简单工厂中,所有产品必须拥有相同接口或父类,属于同一产品系列的 * 1. 定义商品接口 * 2. 具体商品继承商品接口,实现接口定义的方法 * 3. 定义工厂,有个静态static的获取实例的方法getProduct(String p) * 直接通过工厂名.getProduct("p")来获取具体对象 * * 缺点: 不符合开闭原则 * getProduct()方法中需要定义每个商品,增加商品的话这里需要自己手动添加if(){} * 商品子类过多会太庞大,不适于

weixin_48438454的博客 135
上一篇: 9.多态
下一篇: 2. 单例设计模式
cuichen97
博客等级 码龄7年 34粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值