zoukankan      html  css  js  c++  java
  • factory工厂模式之工厂方法FactoryMethod

    工厂方法(Factory Method)
    * 工厂方法把不同的产品放在实现了工厂接口的不同工厂类(FactoryAImpl,FactoryBImpl...)里面,
    * 这样就算其中一个工厂类出了问题,其他工厂类也能正常工作,互相不受影响,
    * 以后增加新产品,也只需要新增一个实现工厂接口工厂类,就能达到,不用修改已有的代码

    代码解释:

    1.创建产品接口Product,并创建2个产品子类android手机、Apple手机,都实现Product接口

    public interface Product {
        
    }
    public class Android implements Product{
    
        public Android() {
            System.out.println("生产一个Android手机...");
        }
    }
    public class Apple implements Product{
    
        public Apple() {
            System.out.println("生产一个Apple手机...");
        }
    }

    2.创建工厂接口,添加生产方法(返回值是Product),并针对每个产品,创建对应的工厂实现类

    public interface Factory {
        
        /**
         * 生产一个产品
         * @return
         */
        public Product process();
    }
    public class AndroidFactory implements Factory {
    
        @Override
        public Product process() {
            return new Android();
        }
    }
    public class AppleFactory implements Factory {
    
        @Override
        public Product process() {
            return new Apple();
        }
    }

    3.客户端调用:Test

    public static void main(String[] args) {
    //        Factory factory = new AppleFactory();//苹果工厂
            Factory factory = new AndroidFactory();//安卓工厂
            factory.process();
        }

    这样,只需要修改new XXXFactory()就可以生产该工厂对应的产品

    * 缺陷:
    * 工厂方法为每种类型的产品(比如手机类、汽车类...)的 每个实现类(比如手机类[安卓工厂、苹果工厂] 汽车类[宝马工厂、奔驰工厂])创建一个对应的工厂类,当有数百种甚至上千种产品的时候,也必须要有对应的上百成千个工厂类,这就出现了传说的类爆炸,对于以后的维护来说,简直就是一场灾难.....

    逃避不一定躲得过,面对不一定最难过
  • 相关阅读:
    linux下搭建lamp环境以及安装swoole扩展
    TP5 中引入第三方类库
    thinkphp5 查询的数据是对象时,获取原始数据方法
    thinkphp5 列表页数据分页查询3-带搜索条件
    thinkphp5 列表页数据分页查询2-带搜索条件
    thinkphp5 列表页数据分页查询-带搜索条件
    thinkphp5 怎么获取当前的模块,控制器和方法名
    限定页面执行时间,请求超时抛出异常或提示
    centos安装netcat
    redis在PHP中的基本使用案例
  • 原文地址:https://www.cnblogs.com/yangzhenlong/p/5152403.html
Copyright © 2011-2022 走看看