zoukankan      html  css  js  c++  java
  • 设计模式-工厂方法模式

    返回上一级目录: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设计模式

  • 相关阅读:
    Ubuntu使用PBIS认证
    命令行运行Python脚本时传入参数的三种方式
    Python中调用shell
    Install chocolatey
    Configure vyatta
    Linux: Block Port With IPtables
    转:PHPStorm+XDebug进行调试图文教程
    转 Fira Code | 为写程序而生的字体
    转 [PHP]
    转:Drupal 如何得到字段的值?
  • 原文地址:https://www.cnblogs.com/zhou-920644981/p/12217403.html
Copyright © 2011-2022 走看看