美文网首页设计模式学习小结
设计模式小结-工厂方法模式

设计模式小结-工厂方法模式

作者: r09er | 来源:发表于2017-10-06 13:55 被阅读5次

    工厂方法模式模式小结:

    工厂方法模式是简单工厂模式的延伸,它继承了简单工厂模式的优点,同时还弥补了简单工厂模式的不足。

    优点:

    • 1.工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名。
    • 2.基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够让工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。
    • 3.在系统中加入新产品时,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品,而只要添加一个具体工厂和具体产品就可以了。符合开闭原则
      缺点:
    • 1.在增加新产品的时候需要同时增加工厂类和产品类,会增加系统的类个数,一定程度上增加系统复杂度。
    • 2.要考虑系统的扩展性,所以会引入抽象层和,调用均通过抽象层调用,会增加系统的抽象性和理解难度。
    • 3.由于为了符合开闭原则,可能会引入DOM,反射,等技术,会增加实现难度。

    适用场景

    • 1.客户端不需要知道调用的对象类,只需要知道对象所对应的工厂。
    • 2.抽象工厂对象通过其子类来指定生产的对象,抽象工厂对象只需提供一个创建产品的接口或抽象方法,具体实现由其子类来确定。

    示例场景

    有一款图片读取解析软件,读取各种不同类型的图片格式并解析,针对每一种图片格式都设计一个图片读取器,如GIF图片读取器用于读取GIF格式的图片、JPG图片读取器用于读取JPG格式的图片。

    UML类图

    示例代码

    //图片接口
    public interface Picture {
        //图片的解析方法,解析png,jpg,gif等图片
        void analysis();
    }
    //具体图像对象
    public class JPGPicture implements Picture {
        @Override
        public void analysis() {
            System.out.println("解析JPG图片");
        }
    }
    //抽象的图片工厂方法
    public abstract class PictureFactory {
        //读取图片方法
        public abstract Picture readPicture();
    
        public void analysisPicture(){
            Picture picture = this.readPicture();
            picture.analysis();
        }
    }
    //具体的图片工厂
    public class JPGFactory extends PictureFactory{
    
        @Override
        public Picture readPicture() {
            System.out.println("读取jpg图片");
            return new JPGPicture();
        }
    }
    //客户端调用,使用读取XML配置,反射获取实现类的方式
     PictureFactory pictureFactory = (PictureFactory) XMLUtil.getBean();
            pictureFactory.analysisPicture();
    
    

    相关文章

      网友评论

        本文标题:设计模式小结-工厂方法模式

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