《大话设计模式》--工厂方法模式

题目:大学生和志愿者学雷锋,轮流去给孤寡老人送爱心

public class LeiFeng {
    public void sweep() {
        System.out.println("扫地");
    }

    public void wash() {
        System.out.println("洗衣");
    }

    public void buyRice() {
        System.out.println("买米");
    }

}
public class UnderGraduate extends LeiFeng {}

public class Volunteer extends LeiFeng {}
public interface IFactory {
    LeiFeng createLeiFeng();
}
public class UnderGraduateFactory implements IFactory {
    @Override
    public LeiFeng createLeiFeng() {
        return new UnderGraduate();
    }
}

public class VolunteerFactory implements IFactory {
    @Override
    public LeiFeng createLeiFeng() {
        return new Volunteer();
    }
}
public class Test {
    public static void main(String args[]) {
        IFactory factory = new PoliceFactory();
        LeiFeng student = factory.createLeiFeng();
        student.sweep();
        student.wash();
        student.buyRice();
    }
}

工厂类和方法类都要分别继承,工厂类用于生成新的对象。如果再加一个警察类,只需要下面这样做就可以了:

public class Police extends LeiFeng {}

public class PoliceFactory implements IFactory {
    @Override
    public LeiFeng createLeiFeng() {
        return new Police();
    }
}

 

不需要动服务端,只需要在客户端Test中增加new PoliceFactory()就可以了

工厂方法模式和简单工厂模式的区别:

简单工厂模式只有一个工厂类,里面通过switch...case判断生成什么对象,如果增加了新的判断,就要修改服务端了,违背了开放-闭合原则。工厂方法模式有效的解决了这一问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值