工厂模式个人理解--JAVA

一直想学习下设计模式,不过总是被耽搁,今天就从最简单的工厂模式开始吧.记录下来.

买了个GOF的设计模式的书,不过自己水平有限,上面的例子又都不是java的,举的例子又不像国内的那种简单, 所以看起来有点吃力,

就去网上搜了下看看别人的新的,结果发现大部分内容都一样, 而且大部分内容和书上的也一样.只是例子换了而已.

对于工厂模式的描述, 各个博客基本是一字不差,而且感觉过于学院派.我还是把我个人理解写下来吧.


工厂模式分类:(GOF的书中只说了2种,1,2算一种)

1.简单工厂

2.工厂方法

3.抽象工厂

下面一种一种来说.有个博客的开车的例子不错.我也用这个例子来说明.

1.简单工厂

例如一个土豪,有三辆车,奔驰,宝马,奥迪.  还雇了司机为他开车。不过土豪坐车时总是怪怪的:

上奔驰,车后跟司机说“开奔驰车!”,坐上宝马后他说“开宝马车!”,坐上奥迪说“开奥迪车!”

这中问题,在程序中也会出现. 可以用简单工厂来解决.(总感觉好像学习多态的时候也是这种例子)

代码很简单. 先抽象一个车的接口,每个车都实现这个接口.

然后做个生产车的工厂(一个类),来判断生成什么车.

public interface Car {
	public void driver();
}

public class BenCar implements Car {

	@Override
	public void driver() {
		System.out.println("Ben dirver !!!");
	}

}

public class AodiCar implements Car {

	@Override
	public void driver() {
		System.out.println("Aodi dirver !!!");
	}

}

//来判断生成什么车
public class CarFactory {
	public static Car getCar(String type){
		if(type.equals("Ben")){
			return new BenCar();
		}
		if(type.equals("Aodi")){
			return new AodiCar();
		}
		return null;
	}
}
<pre name="code" class="java">public class Person {
	public static void main(String[] args) {
		Car car = <span style="font-family: Arial;">CarFactory </span><span style="font-family: Arial;">.getCar("Aodi");</span>
		car.driver();
	}
}

 

小结:感觉很简单吧. 这个模式有一点不好的地方,就是新增一辆车的话,就需要去工厂的CarFactory里面增加一个判断.

据说这个不符合开闭原则(对扩展开放;对修改封闭).还有就是可能如果层次多的话,CarFactory比较乱吧.

(还有个个人疑惑, 是否CarFactory里面的getCar()方法必须是static的才算简单工厂?)

2. 工厂方法

工厂方法,就是把上面的CarFactory类也抽象一下,这样就符合开闭原则, 代码如下(Car类不变,就用上面的代码)

public interface Driver {
	public Car getCar();
}

public class BenDriver implements Driver {
	@Override
	public Car getCar() {
		return new BenCar();
	}
}

public class AodiDriver implements Driver {
	@Override
	public Car getCar() {
		return new AodiCar();
	}
}

public class Person {
	public static void main(String[] args) {
			Driver driver = new AodiDriver();
			Car car = driver.getCar();
			car.dirver();
	}
}

总结;可以看到工厂方法就是把工厂再抽象了一下.

3.抽象工厂

抽象工厂和工厂方法貌似没有太大区别.网上的说明都是指抽象工厂是为了应付更复杂的模式.


总结: 感觉工厂模式,其实主要是面向接口编程,增强代码的可扩展性等.

这个设计模式不算太难,难的应该是什么时候用这个模式.这可能只有实战经验才行了.


这个错误是由于无法连接到本地主机的10248端口导致的。这个端口通常是kubelet进程监听的端口,用于健康检查。出现这个错误可能是由于kubelet进程没有正确启动或者配置错误导致的。 解决这个问题的方法是检查kubelet进程的状态和配置。你可以按照以下步骤进行操作: 1. 检查kubelet进程是否正在运行。你可以使用以下命令检查kubelet进程的状态: ```shell systemctl status kubelet ``` 如果kubelet进程没有运行,你可以使用以下命令启动它: ```shell systemctl start kubelet ``` 2. 检查kubelet的配置文件。你可以使用以下命令查看kubelet的配置文件路径: ```shell kubelet --kubeconfig /etc/kubernetes/kubelet.conf --config /var/lib/kubelet/config.yaml --bootstrap-kubeconfig /etc/kubernetes/bootstrap-kubelet.conf config view ``` 确保配置文件中的端口号和地址正确,并且与你的环境相匹配。 3. 检查网络连接。你可以使用以下命令检查是否可以连接到localhost10248端口: ```shell curl -sSL http://localhost:10248/healthz ``` 如果无法连接,请确保端口没有被防火墙或其他网络配置阻止。 4. 检查docker的配置。有时候,kubelet进程依赖于docker进程。你可以按照以下步骤检查docker的配置: - 创建/etc/docker目录: ```shell sudo mkdir /etc/docker ``` - 编辑/etc/docker/daemon.json文件,并添加以下内容: ```json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "registry-mirrors": ["https://tdhp06eh.mirror.aliyuncs.com"] } ``` - 重启docker进程: ```shell systemctl restart docker ``` 请注意,以上步骤是一种常见的解决方法,但具体解决方法可能因环境而异。如果以上步骤无法解决问题,请提供更多的错误信息和环境配置,以便我们能够更好地帮助你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值