设计模式之工厂模式

在古代的时候,人们身上穿的衣服其实是人们自己使用织布机织的,随着社会的发展,一直到了现代社会,我们身上穿的衣服基本上都是在工厂里面做好了,直接拿到市面上去卖就好了,对于我们身上的衣服而言,由一开始的手工制作再到今天的工厂生产,这就是工厂模式。

一、认识工厂模式

工厂模式主要分为三个:

(1)简单工厂模式:我们的衣服在工厂里面去建造,这就是简单工厂模式

(2)工厂方法模式:随着社会的发展,用户现在想要一身黑色的衣服、也想要一身红色的衣服。于是乎,我们开始定义一个总厂,下面有很多具体的工厂来生产不同颜色的衣服。

(3)抽象工厂模式时代:随着客户的要求越来越高,不同颜色衣服还要带各种颜色的帽子去搭配。于是这个工厂又开始生产衣服又要去生产帽子。

我们这里所说的工厂模式就是指的前两种:简单工厂模式和工厂方法模式

为了演示方便,(其实我是借鉴了很多别人的文章),我们先从手动织布时代开始:

二、手动织布时代

我们先用一张图来看一下手动织布时代的关系:

在这里插入图片描述

第一步:有一个cloth类

public class Cloth {
	//在古代,布是需要我们手动去织的。
	public Cloth() {
		System.out.println("手动去织布。。。。");
	}
}

第二步:人们要想使用,需要手动去new出一个

public class User {	
	//手动织布时代:需要什么衣服,我们要自己new一个对象
	Cloth cloth=new Cloth();
}

手动织布时代样子很简单,但是时间久了,人越来越多,衣服也会越来越多,我们创建的对象也会越来越多,代码会显得格外臃肿。于是乎,人们开始创建了工厂,我们不必关系自己如何去生产布匹,而是交给工厂

三、简单工厂时代

我们在使用一张图来表示:

在这里插入图片描述

从上面我们可以看到简单工厂模式主要有四个角色:

(1)客户(User):用来指定生产什么衣服,提要求的

(2)工厂(factory):生产所有衣服的工厂

(3)抽象产品(abstract product):定义所有衣服的抽象类,可以描写所有衣服的共同属性

(4)具体产品(product):抽象衣服的具体实现

下面我们代码来实现一下:

第一步:定义抽象类

abstract  class Cloth {
	public Cloth() {
	}
}

第二步:具体产品类

public class RedCloth extends Cloth {
	public RedCloth() {
		System.out.println("生产红色衣服。。。");
	}
}

还有黑色衣服:

public class BlackCloth extends Cloth{
	public BlackCloth() {
		System.out.println("生产黑色衣服。。。");
	}
}

第三步:工厂类

public class ClothFactory {
	public Cloth createCloth(String type) {
		switch (type) {	
			case "red":
				return new RedCloth();
			case "black":
				return new BlackCloth();
			default:
				break;
		}
		return null;
	}
}

第四步:用户

public class User {	
	public static void main(String[] args) {
		//简单工厂时代:东西都交给工厂来生产
		ClothFactory factory=new ClothFactory();
		//接下来我们需要什么直接就去让工厂来创建
		factory.createCloth("red");
		factory.createCloth("black");
	}
}

四、工厂方法模式

随着社会的发展,发现用户需要衣服的颜色也开始变得越来越多了,一般都是花里胡哨的那些,这时候有就麻烦了,因为每次新增加一种颜色的衣服时候,我们都需要在工厂里面添加一个新的case语句。这样颜色越来越多,工厂类开始变得臃肿起来。于是为了不违背开闭原则,开始对工厂类有一个划分。

下面使用一张图来表示一下:

在这里插入图片描述

从上面我们可以看到主要有五个角色:

(1)用户:提需求,使用衣服

(2)工厂接口:我们不再一个工厂去生产所有衣服了,而是定义一个抽象接口,这样有新的需求的时候,我们就可以把这些工厂的共同操作提取出来

(3)具体工厂:具体工厂对职责又进行了细化分,每一个工厂只负责一种产品

(4)抽象产品:产品的所有抽象类

(5)具体产品:具体的每一种衣服。

下面看代码的具体实现:

第一步:定义一个抽象产品类cloth

abstract  class Cloth {
	public Cloth() {}
}

第二步:具体的产品类

public class RedCloth extends Cloth {
	public RedCloth() {
		System.out.println("生产红色衣服。。。");
	}
}

还有黑色衣服

public class BlackCloth extends Cloth{
	public BlackCloth() {
		System.out.println("生产黑色衣服。。。");
	}
}

第三步:工厂接口

interface  ClothFactory {
	public Cloth createCloth();
}

第四步:具体工厂

public class RedClothFactory implements ClothFactory {
	@Override
	public RedCloth createCloth() {
		return new RedCloth();
	}
}

还有一个黑色衣服工厂

public class BlackClothFactory implements ClothFactory{
	@Override
	public BlackCloth createCloth() {
		return new BlackCloth();
	}
}

第五步:用户

public class User {	
	public static void main(String[] args) {
		//工厂方法时代:
		RedClothFactory redClothFactory=new RedClothFactory();
		RedCloth redcloth= redClothFactory.createCloth();
		
		BlackClothFactory blackClothFactory=new BlackClothFactory();
		BlackCloth blackcloth= blackClothFactory.createCloth();
	}
}

其实现在还不能满足我们的需求,因为随着时代的发展,人们的需求变得更加复杂,比如说我红色衣服要10000件,但是黑色衣服只需要10件,这样的差别实在太大了,而我们仍然需要建造一个工厂。而且,还有一些用户买衣服的时候还需要选择是不是再购买一双鞋子。所以上面的这个模式能够解决一些简单的情况,但是比较复杂的情况依然不能解决。

不过办法总是比问题要多,下一遍博客主要就是解决这个问题,也就是抽象工厂模式。

OK,今天的博文先到这,如有问题还请批评指正:

需要计算机系列的各种视频教程与书籍,还请关注我的微信公众号:java的架构师技术栈

但是黑色衣服只需要10件,这样的差别实在太大了,而我们仍然需要建造一个工厂。而且,还有一些用户买衣服的时候还需要选择是不是再购买一双鞋子。所以上面的这个模式能够解决一些简单的情况,但是比较复杂的情况依然不能解决。

不过办法总是比问题要多,下一遍博客主要就是解决这个问题,也就是抽象工厂模式。

OK,今天的博文先到这,如有问题还请批评指正:

需要计算机系列的各种视频教程与书籍,还请关注我的微信公众号:java的架构师技术栈

在这里插入图片描述

<think>嗯,用户问的是AD软件中换层的快捷键。首先,我需要确定AD指的是哪个软件。通常,AD可能指Altium Designer,这是一款常用的电子设计自动化软件,用于电路板设计。所以用户可能是在使用Altium Designer时想要快速切换层,提高工作效率。 接下来,我需要回忆或查找Altium Designer中关于层切换的快捷键。根据之前的知识,Altium Designer中确实有一些快捷键用于切换不同的层。比如,小键盘的数字键可能对应不同的层,例如1是Top Layer,2是Mid Layer 1,依此类推。不过,不同版本可能会有些差异,所以需要确认这一点是否正确。 另外,用户可能还不太清楚如何自定义这些快捷键,或者是否有其他方式快速换层。比如,使用快捷键L调出层设置面板,或者通过Preferences设置自定义快捷键。这可能是用户潜在的需求,想要更灵活地调整快捷键以适应自己的习惯。 还要考虑用户可能的操作环境,比如是否在使用英文版软件,或者是否有安装不同版本的Altium Designer,因为不同版本快捷键可能不同。此外,用户可能对层的概念不太熟悉,比如信号层、电源层、丝印层等,是否需要简要解释这些层的用途,以帮助用户更好地理解换层的意义。 另外,是否有其他相关功能,比如切换层的同时切换走线层,或者如何在多层板中快速跳转,这些也可能是用户需要的信息。比如在布线时按数字键切换层并自动添加过孔,这样的操作是否可行,需要确认正确性。 总结一下,回答需要包括: 1. 常用默认快捷键,如小键盘数字键对应各层。 2. 如何通过快捷键L打开层设置面板。 3. 自定义快捷键的方法。 4. 可能需要注意的版本差异或操作细节。 5. 简要说明层的类型和用途,帮助用户理解为何需要换层。 需要确保信息准确,避免错误,比如Altium Designer是否真的使用小键盘数字键作为默认切换层的快捷键。可能需要查阅官方文档或可靠来源确认。此外,提醒用户如果快捷键不起作用,可能需要检查键盘设置或软件版本,确保兼容性。 最后,组织回答时要结构清晰,分点说明,便于用户理解。如果有不确定的地方,建议用户参考软件帮助文档或官方资源,以确保信息的正确性。</think>在 Altium Designer(AD)中,**换层快捷键**是提高 PCB 设计效率的重要工具。以下是常用操作说明: --- ### 一、默认快捷键 1. **小键盘数字键** - 按下数字键 **1~6** 可快速切换至对应信号层(例如:1=Top Layer,2=Mid Layer 1,依此类推)。 - **+/- 键**:切换至下一层/上一层(需开启小键盘的 Num Lock)。 2. **信号层与平面层切换** - **Shift+Ctrl+鼠标滚轮**:按住后滚动滚轮可快速切换层(需按住快捷键)。 3. **特殊层快捷键** - **L**:打开层设置面板(快速启用/禁用层显示)。 - **Ctrl+Shift+G**:切换到丝印层(Top Overlay)。 - **Ctrl+Shift+M**:切换到阻焊层(Top Solder Mask)。 --- ### 二、自定义快捷键 1. 通过 **Preferences > PCB Editor > Shortcuts** 修改快捷键。 2. 搜索功能关键词(如 `Layer Next`、`Layer Previous`)绑定自定义按键。 --- ### 三、实用技巧 1. **布线时自动换层**: 布线过程中按下对应层数字键,软件会自动添加过孔并切换至目标层。 2. **层高亮显示**: 按 **Shift+S** 进入单层模式,按层数字键可快速高亮特定层。 --- ### 四、注意事项 - 不同版本快捷键可能略有差异,建议通过 **Help > Shortcuts** 确认当前版本设置。 - 若快捷键失效,检查键盘输入法或软件冲突。 如果需要更详细的层管理(如创建/删除层),可通过 **Design > Layer Stack Manager** 操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值