设计模式-工厂方法模式

来源:互联网 发布:com域名删除的准确时间 编辑:程序博客网 时间:2024/05/16 07:41

工厂方法的定义

工厂方法模式是一种常见的创建型设计模式,在简单工厂模式中已经指出,简单工厂模式最大的缺点是违反了面向对象的开放封闭设计原则,实际上,工厂方法模式是简单工厂模式的进一步抽象和推广,将工厂中的逻辑判断通过接口的形式提取出来,让调用端做选择。

ULM类图

这里写图片描述

从类图中可以清晰的看到,简单工厂模式中的工厂被拆分成工厂接口实现类

代码实现

/** * 雷锋 做的好事,大家都要学习 * */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 UndergrateFactory implements IFactory{    @Override    public LeiFeng createLeiFeng() {        // TODO Auto-generated method stub        return new Undergraduate();    }}public class VolunteerFactory implements IFactory {    @Override    public LeiFeng createLeiFeng() {        // TODO Auto-generated method stub        return new Volunteer();    }}public class Client {    public static void main(String[] args) {        IFactory factory = new UndergrateFactory();        LeiFeng student = factory.createLeiFeng();        student.buyRice();    }}

工厂方法模式与简单工厂模式对比

工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使得对一个类的实例化延迟到其子类中。

  • 简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖

  • 工厂方法模式实现时,客户端需要决定实例化哪个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码中进行,当要增加功能时,本来是修改工厂类的,而现在是修改客户端。

0 0