设计模式——简单工厂

在《重构 改善既有代码的设计》8.14 以子类取代类型码一节中,使用到了一种类似于简单工厂的方法,当时将基类定义为抽象类,并创建了一个静态方法create(mode MODE),使用该方法来实例化。 

如果使用简单工厂,就可以新建一个工厂类,把实例化对象的任务交给工厂类。

public class PowerManagerNewFactory{
	public static PowerManagerNew createPowerManagerNew(PowerManagerNew.MODE mode) {
		switch(mode) {
		case A: return new PowerManagerNewA();
		case B: return new PowerManagerNewB();
		case C: return new PowerManagerNewC();	
		default: throw new IllegalArgumentException();
		}
	}
}

实例化对象是只需要通过静态方法即可。

PowerManagerNew powerManagerNew = PowerManagerNewFactory.createPowerManagerNew(PowerManagerNew.MODE.A);
powerManagerNew.set();

新增了 一个PowerManagerNewD类,如果mode是String类,只要在createPowerManagerNew方法中增加一种case,返回PowerManagerNewD对象即可。如果mode是enum,则还需要修改PowerManagerNew.MODE。但是使用enum的好处就是避免了调用时字符串拼写错误,运行时才能发现。

如果不用简单工厂,对于PowerManager类,在每个依赖mode来确定行为的方法中,都要使用switch语句或if语句进行选择。此外,如果对于新添加一种mode的情况,使用多态的方法,可以避免修改时对其他mode的代码造成破坏。

参考

大话设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值