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()就可以生产该工厂对应的产品

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

    逃避不一定躲得过,面对不一定最难过
  • 相关阅读:
    CodeProject每日精选: ListView controls
    适配器模式(Adapter Pattern) 精选经验合集
    设计模式 合成模式(Composite Pattern) 精选经验合集
    CodeProject每日精选: Grid controls
    设计模式 享元模式(Flyweight Pattern) 精选经验合集
    设计模式 组合模式(Composite) 精选经验合集
    桥接模式(Bridge Pattern) 资料合集
    CodeProject每日精选: Progress controls 进度条
    快速幂模板
    hdu 1087dp裸题
  • 原文地址:https://www.cnblogs.com/yangzhenlong/p/5152403.html
Copyright © 2011-2022 走看看