zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式

    参考:http://www.runoob.com/design-pattern/factory-pattern.html

    工厂模式代码示例

    定义一个产品/对象的共有抽象,接口代码如下:

    /**
     * @author Kevin
     * 
     * 饮料接口,提供 什么口味的方法
     */
    public interface DrinkInterface {
        void taste();
    }

    实现以上接口的产品如下:

    /**
     * @author Kevin
     * 可乐饮料
     */
    public class ColeDrink implements DrinkInterface{
    
        @Override
        public void taste() {
            System.out.println("苦可乐");
        }
    
    }
    /**
     * @author Kevin
     * 雪碧饮料
     */
    public class SpriteDrink implements DrinkInterface{
    
        @Override
        public void taste() {
            System.out.println("甜雪碧");
        }
    
    }

    工厂类如下:

    /**
     * @author Kevin 2017-12-27
     * 饮料工厂
     *
     */
    public class DrinkFactory {
        public static DrinkInterface getDrink(String taste){
            DrinkInterface drink = null;
            if(taste.equals("sprite")){
                drink = new SpriteDrink();
            }else if(taste.equals("cole")){
                drink = new ColeDrink();
            }
            return drink;
        }
    }
    

    最后写一个测试类:

    /**
     * @author Kevin
     *  客户订单测试类
     */
    public class CustomerOrderDemo {
    
        public static void main(String[] args) {
            DrinkInterface d = DrinkFactory.getDrink("sprite");
            d.taste();
    
            DrinkInterface d2 = DrinkFactory.getDrink("cole");
            d2.taste();
        }
    
    }

    工厂模式优缺点

    虽然网上关于这个已经很多了,但是还是在这里再啰嗦一下。
    优点就是简单且扩展容易,只需要实现接口,在工厂类中添加即可。
    缺点是随着产品数量越来越多,实现类也会越来越多,是程序变得臃肿,类的数量不断增加,维护成本增加。

    工厂模式应用与思考

    在实际的开发中,到底我们什么时候用的上这样的模式呢?有的时候,我们不应该被模式模板化,其实很多时候我们都在使用这样的模式套路,只是不曾发现。是不是共同的东西我们抽象出了一个共有的接口,然后另外又提供了一个方便获取他们的类,这都该算是暗和了工厂模式的思路。比如在我的开发过程中,我们做对接接口开发,往往对方传过来的xml节点大同却小异,我们为了应对变化又方便大家svn开发,所以就提供一个接口,大家自己去实现解析节点,然后又通过一个工具类提供使用,这其实也算是工厂模式啦。

  • 相关阅读:
    linux 系统管理(2) 文件或目录数量统计
    linux系统管理(1)之 内核编译选项查看
    apt 命令大全
    system命令
    ubuntu 登陆闪回
    网络知识之ipset
    mac 系统配置(一)
    windows下的qt编译器配置
    QT5.14.1+qwt-6.1.4编译
    无法打开源文件QtWidgets/QApplication
  • 原文地址:https://www.cnblogs.com/Kevin-1992/p/12608404.html
Copyright © 2011-2022 走看看