zoukankan      html  css  js  c++  java
  • 简单工厂模式

    简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例。
    实现:
    简单工厂模式
     
    工厂类:

    public class Creator
    {
        public static Product factory()
        {
            return new ConcreteProduct();
        }
    }

    抽象产品:

    public interface Product
    {
    }

    具体产品:

    public class ConcreteProduct implements Product
    {
        public ConcreteProduct(){}
    }

    实现要点:

    1. 工厂类可以根据传入的参数决定创建出哪一种产品类的实例。

    2. 具体产品有共同的商业逻辑,那么这些公有的逻辑就应当移到抽象角色里面,这就意味着抽象角色应当由一个抽象类扮演。

    3. 每个工厂类可以有多于一个的工厂方法,分别负责创建不同的产品对象。如java.text.DateFormat 类

    特例:

    如果只有一个具体产品的话,抽象产品可以省略

    clip_image004

    在某些情况下,可以由抽象产品扮演工厂类的角色,典型的应用就是java.text.DateFormat,一个抽象产品担当子类的工厂

    clip_image006

    如果抽象产品再省略的话,可以做到三者合并,这样一个产品类为自身的工厂

    clip_image008

     

    优点:

    模式的核心是工厂类。工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例。而客户端则可以免除直接创建产品的责任,而仅仅负责“消费”产品。

    缺点:

    1. 工厂类成为“全能类”,添加新的产品或扩展功能时会非常复杂

    2. 经常使用static方法作为工厂方法(也叫静态工厂方法),不能通过继承来改变创建方法的行为。

     

    在java中的应用:

    DateFormat和sax2库中的XMLReaderFactory

    import java.util.Locale;
    import java.util.Date;
    import java.text.DateFormat;
    import java.text.ParseException;

    public class DateTester
    {
        public static void main(String[] args)
        {
            Locale locale = Locale.FRENCH;
            Date date = new Date();

            String now = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale)
                .format(date);

            System.out.println(now);

            try
            {
                date = DateFormat.getDateInstance(DateFormat.DEFAULT, locale)
                    .parse("16 nov. 01");
                System.out.println(date);
            }
            catch(ParseException e)
            {
                System.out.println("Parsing exception:"+e);
            }
        }
    }

    作者:God bless you
    本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

  • 相关阅读:
    软件工程个人作业01
    阅读计划及浅读问题
    引言作业1
    多态和异常分析课后
    大道至简七八章阅读
    接口与继承 课后实践
    构建执法阅读笔记02
    冲刺第五天
    学习进度条七
    冲刺第四天
  • 原文地址:https://www.cnblogs.com/luckForever/p/7254948.html
Copyright © 2011-2022 走看看