教你如何一篇博客读懂设计模式之—--工厂模式

一篇博客读懂设计模式之—工厂模式

工厂模式在我们日常开发的时候经常用到,相信大家都有了一定的了解,工厂模式是一种创建对象的设计模式,它提供一种创建对象的最佳方式。

主要过程是: 定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

工厂模式主要有常见的三种类型:简单工厂模式,工厂方法模式,抽象工厂模式。下面我们分别用代码来介绍一下这三种模式的演化过程:

简单工厂模式

  1. 添加一个接口
public interface Car {
	String getBrand();
}
  1. 添加几个实现类实现接口
public class Bmw implements Car {
	@Override
	public String getBrand() {
		return "BMW";
	}
}
public class Benz implements Car {
	@Override
	public String getBrand() {
		return "Benz";
	}
}
public class Audi implements Car{
	@Override
	public String getBrand() {
		return "Audi";
	}
}
  1. 添加一个方法来选择创建的对象
//todo:1 简单工厂模式,虽然代码很简单,但是一个工厂怎么可能生产这么多不同的产品,不太符合规律,所以有了工厂方法模式
public class SimpleFactory {
	public Car getCar(String name){
		if("BMW".equalsIgnoreCase(name)){
			return new Bmw();
		}else if("Benz".equalsIgnoreCase(name)){
			return new Benz();
		}else if("audi".equalsIgnoreCase(name)){
			return new Audi();
		}else{
			return null;
		}
	}
}
  1. 添加测试类:
public class TestSimpleFactory {
	public static void main(String[] args) {
		SimpleFactory simpleFactory = new SimpleFactory();
		Car car = simpleFactory.getCar("");
		System.out.println(car.getBrand());
	}
}

工厂方法模式:

  1. 添加一个工厂的接口
//todo:2 工厂方法模式,通过接口来实现,不过这有个不足,我们消费者得自己知道用哪个工厂来进行生产
public interface Factory {
	Car getCar();
}
  1. 实现接口的工厂类
public class AudiFactory implements Factory {
	@Override
	public Car getCar() {
		return new Audi();
	}
}
public class BenzFactory implements Factory {
	@Override
	public Car getCar() {
		return new Benz();
	}
}
public class BmwFactory implements Factory{
	@Override
	public Car getCar() {
		return new Bmw();
	}
}
  1. 测试类:
public class TestFuncFactory {
	//这种模式也有点问题,工厂模式的好处是让使用者更加方便,但是这种模式还要我们知道是要用哪个工厂来创建,这也太不智能了吧,所以就有了抽象工厂
	public static void main(String[] args) {
		System.out.println(new BenzFactory().getCar());

		System.out.println(new BmwFactory().getCar());
		
		System.out.println(new AudiFactory().getCar());

	}
}

抽象工厂方法: 整合了前面两种模式

  1. 添加一个抽象工厂
//todo:3. 抽象工厂方法模式,利用抽象类来实现,综合了工厂方法和简单工厂方法两种模式的优缺点
public abstract  class AbstractFactory {
	abstract Car getCar();
	public Car getCar(String name){
		if("BMW".equalsIgnoreCase(name)){
			return new BmwFactory().getCar();
		}else if("Benz".equalsIgnoreCase(name)){
			return new BenzFactory().getCar();
		}else if("audi".equalsIgnoreCase(name)){
			return new AudiFactory().getCar();
		}else{
			return null;
		}
	}
}
  1. 添加一个默认实现类
//因为抽象类不能直接实例化,所以这里添加了一个默认类来实现抽象类的其他方法
public class DefaultFactory extends AbstractFactory {
	@Override
	Car getCar() {
		return new BenzFactory().getCar();
	}
}
  1. 测试类
public class TestAbstrFactory {
	public static void main(String[] args) {
		DefaultFactory defaultFactory = new DefaultFactory();
		System.out.println(defaultFactory.getCar("bmw"));
	}
}

**

后期会继续完善 欢迎留言点赞!!

**

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简单工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在此模式中,我们使用一个工厂类来创建不同类型的对象,而不是在代码中直接实例化对象。 对于你提到的三角形和圆形的创建和擦除,我们可以使用简单工厂模式来实现。首先,我们需要定义一个形状接口,它包含画图和擦除方法。然后,我们可以创建两个实现这个接口的类,分别是三角形和圆形类。接下来,我们创建一个工厂类,它包含一个方法,该方法接受一个字符串参数,根据参数的不同返回三角形或圆形对象。 以下是一个简单的示例代码,用于演示如何使用简单工厂模式来创建和擦除三角形和圆形: ```java interface Shape { void draw(); void erase(); } class Triangle implements Shape { @Override public void draw() { System.out.println("Draw a triangle."); } @Override public void erase() { System.out.println("Erase a triangle."); } } class Circle implements Shape { @Override public void draw() { System.out.println("Draw a circle."); } @Override public void erase() { System.out.println("Erase a circle."); } } class ShapeFactory { public static Shape createShape(String type) { if (type.equals("triangle")) { return new Triangle(); } else if (type.equals("circle")) { return new Circle(); } else { throw new IllegalArgumentException("Invalid shape type."); } } } public class Main { public static void main(String[] args) { Shape triangle = ShapeFactory.createShape("triangle"); triangle.draw(); triangle.erase(); Shape circle = ShapeFactory.createShape("circle"); circle.draw(); circle.erase(); } } ``` 在上面的代码中,我们首先定义了一个Shape接口,并创建了Triangle和Circle类来实现它。接下来,我们创建了一个ShapeFactory工厂类,它包含一个createShape方法,该方法根据传入的参数返回不同的形状对象。最后,我们在主方法中使用ShapeFactory来创建和擦除三角形和圆形。 这是一个简单的示例,演示了如何使用简单工厂模式来创建和擦除不同类型的形状。在实际应用中,我们可以使用工厂模式来创建和管理更复杂的对象,可以提高代码的可维护性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值