• 设计模式-工厂方法模式


    返回上一级目录:Java设计模式

    工厂方法模式,是对简单工厂模式的升级,将创建产品的工厂抽象出来,具体产品的创建延时到工厂子类去实现,让调用者决定来创建哪一个实例。工厂方法模式有以下角色:抽象产品接口,抽象工厂接口,具体产品,具体工厂。

    类关系图如下:

     抽象产品接口,定义产品的行为

    /**
     * @Author zhouw
     * @Description 产品(手机)接口
     * @Date 2020-01-17
     */
    public interface IPhone {
    
        void play();
    }

    具体产品,具体产品的实现,可以有多个

    public class HuaweiPhone implements IPhone {
    
        @Override
        public void play() {
            System.out.println("我是华为手机");
        }
    }
    public class SumsungPhone implements IPhone {
    
        @Override
        public void play() {
            System.out.println("我是三星手机");
        }
    }

    抽象工厂接口,只有一个接口定义,就是生产产品(做手机)

    /**
     * @Author zhouw
     * @Description 产品(手机)工厂接口
     * @Date 2020-01-17
     */
    public interface IPhoneFactory {
    
        IPhone makePhone();
    
    }

    具体工厂,工厂接口的实现,生成对应的具体产品,一般都是和具体产品实现类一一对应的

    /**
     * @Author zhouw
     * @Description 华为工厂制造华为手机
     * @Date 2020-01-17
     */
    public class HuaweiFactory implements IPhoneFactory {
    
        @Override
        public IPhone makePhone() {
            return new HuaweiPhone();
        }
    }
    /**
     * @Author zhouw
     * @Description 三星工厂制造三星手机
     * @Date 2020-01-17
     */
    public class SumsungFactory implements IPhoneFactory {
    
        @Override
        public IPhone makePhone() {
            return new SumsungPhone();
        }
    }

    最后就是应用了,想要华为手机就用华为手机工厂生产,想用三星手机就用三星手机工厂生产,自己选择对应工厂子类去创建产品对象,还可以随时添加一种产品,比如说苹果手机,就再加一个苹果手机的具体实现和苹果手机工厂的工厂子类。

    public class Application {
    
        public static void main(String[] args) {
            // 制造华为手机
            HuaweiFactory huaweiFactory = new HuaweiFactory();
            IPhone phone1 = huaweiFactory.makePhone();
            phone1.play();
    
            // 制造三星手机
            SumsungFactory sumsungFactory = new SumsungFactory();
            IPhone phone2 = sumsungFactory.makePhone();
            phone2.play();
        }
    }

    输出:

    总结

    工厂方法模式是简单工厂模式的升级,保留了简单工厂模式获取对象的便利性外,还增加了拓展性,易用性,调用者不需要知道获取具体产品的参数(产品名,代码等),只管找对应的产品工厂要就行了,自己选择对应工厂子类去创建产品对象,还可以随时添加一种产品,比如说苹果手机,就再加一个苹果手机的具体实现和苹果手机工厂的工厂子类。

    返回上一级目录:Java设计模式

  • 相关阅读:
    1、远程连接工具
    Restful架构API编码规范
    61、springmvc-异步请求-返回DeferredResult
    60、springmvc-异步请求-返回Callable
    59、servlet3.0-异步请求
    58、springmvc-定制与接管SpringMVC
    HTTP层 —— 响应
    HTTP层 —— 请求
    HTTP层 —— 控制器
    HTTP层 —— CSRF保护
  • 原文地址:https://www.cnblogs.com/zhou-920644981/p/12217403.html
Copyright © 2020-2023  润新知