美文网首页
设计模式:工厂 (Factory)

设计模式:工厂 (Factory)

作者: 咆哮的蚂蚁 | 来源:发表于2016-06-12 18:08 被阅读27次

    简单工厂

    如果我们面临着接口选择问题我们应该使用工厂的方式去创建代码。
    

    使用工厂方法模式的使用,不仅优化的创建部分。也为以后的拓展留下良好的空间。

    解读

    有一次面试的时候,面试官问我这样一个问题:“设计一个程序,他既能解析XML类型的数据,也能解析json类型的数据。说一下你的构思。”这是真实发生的事件。接下来,我给大家分享一下我的设计思路。
    1:看到了这个问题的时候,我首先想到的是,同样都是解析,那么应该抽象一个共同的父类。他们共同行为是解析(Parser).具体的解析实现应该是子类自己去实现。
    2:XML与json解析的创建过程可能会不一样。但这个创建的行为,使用者可以不需要知道。(使用者只需要知道名称就行了)
    3:拓展方面,假如需要增加另外一种解析。也可以在不破坏原来的代码情况下增加。为了更加方便使用者去使用这个对象。我可以使用工厂方法。
    4:使用起来,能够替换方便

    实现关键

    1:创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
    2:如果想增加一个产品,只要扩展一个工厂类就可以。

    Factory

    抽象出共同行为,共同的行为就是解析

    public interface Parser {
        //共同的行为就是解析。
        public void onParser();
    }
    

    子类自己实现细节。

    public class JsonParser implements Parser{
        @Override
        public void onParser() {
            // TODO Auto-generated method stub
            System.out.println("Json 解析");
        }
    }
    public class XMLParser implements Parser{
        @Override
        public void onParser() {
            // TODO Auto-generated method stub
            System.out.println("XML 解析");
        }
    }
    

    由于解析的对象,创建时可能是复杂的,我们把这两个对象放进工厂中“隐蔽”起来。只需要返回一个解析器的对象即可。这也是为了使用起来更加方便。

    public abstract class AbstractParserFactory {
        //隐蔽创建过程
        public abstract Parser create(); 
    }
    
    public class JsonParserFactory extends AbstractParserFactory{ 
        //创建,并返回一个解析器
        @Override
        public Parser create() {
            // TODO Auto-generated method stub
            return new JsonParser();
        }
    }
    
    public class XMLParserFactory extends AbstractParserFactory{
        //创建,并返回一个解析器
        @Override
        public Parser create() {
            // TODO Auto-generated method stub
            return new XMLParser();
        }
    }
    

    最后我们在客户端使用起来就很方便。

                    //工厂
    //      AbstractParserFactory factory = new JsonParserFactory();
            AbstractParserFactory factory = new XMLParserFactory();
            Parser parser = factory.create();
            parser.onParser();
    

    这样设计,不仅使用简单,而且方便拓展。 如果有需要可以在工厂中增加资质判断。

    类图

    工厂.png

    相关文章

      网友评论

          本文标题:设计模式:工厂 (Factory)

          本文链接:https://www.haomeiwen.com/subject/jfnedttx.html