工厂模式

简单工厂

简单工厂
实现同一个接口,根据类型返回不同的对象值。

  1. 公共接口
public interface Toy {
	void	make();
}
  1. 实现接口
package com.dawn.design.factory;

/**
 * @Auther: dawn
 * @Date: 2020/1/13 13:17
 * @Description:
 */
public class TankToy implements Toy {
	@Override
	public void make() {
		System.out.println("坦克玩具");
	}
}

/**
* 工厂实现类
*/
class ToyFactory {

/**
* 根据不同的类型返回不同对象
* type 可以弄成常量
*/
	static Toy produce(String type) {
		if (type.equals("1")) {
			return new TankToy();
		}
		return null;
	}

	public static void main(String[] args) {
		Toy toy = ToyFactory.produce("1");
		toy.make();
	}

}

工厂方法模式

如果简单工厂的type传错了就会导致创建实例失败,所以换一种方式

  1. 通过方法返回
public class ComplexToyFactory {

	static Toy method1(){
		return  new TankToy();
	}
	static Toy method2(){
		return new ComToy();
	}
}

通过不同的方法来设定返回类型。

  1. 通过抽象工厂类实现
abstract class AbstractFactory{
	Toy createToy();
}
class TankFactory extends AbstractFactory{
	@Override
	Toy createToy(){
	return new TankToy();
	}
}

两种方案都可以实现

优点 :

  • 更符合开-闭原则。新增一种产品时,只需要增加相应的具体产品类和相应的工厂子类即可
  • 符合单一职责原则,每个具体工厂类只负责创建对应的产品
  • 不使用静态工厂方法,可以形成基于继承的等级结构

缺点:

  1. 每次新增产品和工厂都会创建类,增加系统开销和开发成本。
  2. 一个具体工厂只能创建一种具体产品
  3. 增加了系统的抽象性和理解难度

总结:工厂模式可以说是简单工厂模式的进一步抽象和拓展,在保留了简单工厂的封装优点的同时,让扩展变得简单,让继承变得可行,增加了多态性的体现

抽象工厂模型

引用地址

https://blog.csdn.net/qq564425/article/details/81082242

总结

按需要进行选择,杀鸡无用牛刀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值