Java设计模式-1

当你第一次听说设计模式的时候可能会觉得这有什么用呢,但当你有了一定的工作经历之后,就会发现缺乏设计模式,代码真的会写的一团糟,接下来我会按照 小博哥的《重学JAVA设计模式》为主记录下我的设计模式学习过程。传送门:小博哥的博客

一、工厂方法模式

工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法, 允许子类 决定实例化对象的类型。

这种设计模式也是Java 开发中最常见的一种模式,它的主要意图是定义一个创建对象的接口,让其子
类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。

简单说就是为了提供代码结构的扩展性,屏蔽每一个功能类中的具体实现逻辑。让外部可以更加简单的 只是知道调用即可,同时,这也是去掉众多ifelse的方式。当然这可能也有一些缺点,比如需要实现的类非常多,如何去维护,怎样减低开发成本。但这些问题都可以在后续的设计模式结合使用中,逐步降低。

实例中是有个一个活动有三种奖品类型,每种奖品的具体方法逻辑比一样,常规的写法是在一个方法体中根据奖品类型if else 一个个判断,然后将具体的逻辑写在对应的if逻辑中

// 1:消费卡、2:实物、3:积分
if(type == 1){
	/*发放消费卡逻辑*/
}else if(type ==2){
	/*发放实物逻辑*/
}else if(type == 3){
	/*发放积分逻辑*/
}

后续如果要再增加奖品类型则再增加一个else if,这种方式比较简单粗暴,由于在示例中没有写具体的逻辑,所以看起来还很清晰明了,但是实际情况下加上一堆的具体逻辑后,在维护的时候再想分清楚谁是谁就有点费劲了;

使用设计模式的思想该怎么做呢?我们可以提取出一个父类,然后每一种奖品的操作逻辑提取为一个子类,通过传入类型,由父类创建具体的子类对象;

//公共父类
 public interface ICommodityService{
 	void sendCommodity(String uid, String commodityId, String bizId, Map<String, String> extMap);
 }

优惠券

public class CouponCommodityService implements ICommodityService{
	public void sendCommodity(String uid, String commodityId, String bizId, Map<String, String> extMap){
	/**/
}

实物

public class GoodsCommodityService implements ICommodityService{
	public void sendCommodity(String uid, String commodityId, String bizId, Map<String, String> extMap){
	/**/
}

积分

public class ScoreCommodityService implements ICommodityService{
	public void sendCommodity(String uid, String commodityId, String bizId, Map<String, String> extMap){
	/**/
}

工厂类

public class StoreFactory{
	public ICommodityService getCommodityService(int type){
		if(type == 1){
			return new CouponCommodityService();
		}
		if(type == 2){
			return new GoodsCommodityService();
		}
		if(type == 3){
			return new ScoreCommodityService();
		}
	}
}

最终的调用方法

StoreFactory storeFactory = new StoreFactory();
ICommodityService commodityService = storeFactory.get(type);
// 发放奖品
commodityService.sendCommodity();

确实整体的复杂度增加了,但局部的逻辑就比较清晰明了了。后续增加新的奖品时只需要增加一个新的类并放入工厂类中即可,调用方可以不改动代码和关心具体的实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值