【设计模式】工厂模式

作者: dongbingliu | 来源:发表于2017-09-13 16:47 被阅读32次

    【设计模式】工厂模式

    @(04【 设计模式 】)[=设计模式]

    公司项目众多,不同项目基于芯片平台方案(Amlogic/全智/瑞芯微RK/Mstar),其 SDK 接口实现有区别,导致应用开发中需要添加 Model 判断语句,代码逻辑混乱,可读性低,引入xxxFramework 中间 Jar 包,其使用的设计模式为简单工厂。

    工厂模式知识点梳理如下:

    工厂模式分类

    简单工厂模式
    定义一个工厂类,根据传入不同参数返回不同实例,被创建的实例具有共同的父类与接口;

    简单工厂模式UML图

    工厂方法模式
    工厂方法模式是简单工厂进一步升级
    定义:定义一个用于创建对象的接口,让子类决定将哪一个类实例化,工厂方法模式让类的实例化延迟到其子类

    工厂方法模式UML图

    抽象工厂模式

    简单工厂模式实例Demo

    创建根据不同厂家生产其对应品牌电脑

    提取生产接口Computer

    public interface Computer {
        void product();
    }
    

    产品类:HuaWei

    public class HuaWeiComputer implements Computer {
        public HuaWeiComputer() {
            System.out.println("Huawei");
        }
        @Override
        public void product() {
            System.out.println("Product HuaWei Computer ");
        }
    }
    

    产品类:Lenovo

    public class LenoverComputer implements Computer {
        public LenoverComputer() {
            System.out.println("Lenovo");
        }
        @Override
        public void product() {
            System.out.println("Product Lenovo Computer");
        }
    }
    

    产品类:Mac

    public class MacComputer implements Computer {
        public MacComputer() {
            System.out.println("MacBook");
        }
        @Override
        public void product() {
            System.out.println("Product MacBookPro Computer");
        }
    }
    

    工厂类:

    public class ComputerFactory {
        public Computer createComputer(String type){
            Computer computer = null;
            switch (type){
                case "HuaWei":
                    computer = new HuaWeiComputer();
                    break;
                case "Lenover":
                    computer = new LenoverComputer();
                    break;
                case "Mac":
                    computer = new MacComputer();
                    break;
            }
            return computer;
        }
    }
    

    客户端:

    public class Clients {
        private void onCreat(){
            ComputerFactory computerFactory = new ComputerFactory();
            MacComputer macComputer = (MacComputer) computerFactory.createComputer("Mac");
            macComputer.product();
            
            HuaWeiComputer huaWeiComputer = (HuaWeiComputer) computerFactory.createComputer("HuaWei");
            huaWeiComputer.product();
        }
    }
    

    工厂方法模式Demo

    实例:设计图片加载类,多个图片加载器,用来加载jpg、png、gif ,每个加载器有一个read 方法,读取图片

    编写加载器共用接口:

    public interface Reader {
        void read();
    }
    

    Reader 里面只有一个read()方法,然后完成各个图片加载器的代码。

    Jpg图片加载器

    public class JpgReader implements Reader {
        @Override
        public void read() {
            System.out.print("read jpg");
        }
    }
    

    Png图片加载器

    public class PngReader implements Reader {
        @Override
        public void read() {
            System.out.print("read png");
        }
    }
    

    Gif图片加载器

    public class GifReader implements Reader {
        @Override
        public void read() {
            System.out.print("read gif");
        }
    }
    

    现在我们按照定义所说定义一个抽象的工厂接口ReaderFactory

    public interface ReaderFactory {
        Reader getReader();
    }
    

    里面有一个getReader()方法返回我们的Reader 类,接下来我们把上面定义好的每个图片加载器都提供一个工厂类,这些工厂类实现了ReaderFactory 。

    Jpg加载器工厂

    public class JpgReaderFactory implements ReaderFactory {
        @Override
        public Reader getReader() {
            return new JpgReader();
        }
    }
    

    Png加载器工厂

    public class PngReaderFactory implements ReaderFactory {
        @Override
        public Reader getReader() {
            return new PngReader();
        }
    }
    

    Gif加载器工厂

    public class GifReaderFactory implements ReaderFactory {
        @Override
        public Reader getReader() {
            return new GifReader();
        }
    }
    

    在每个工厂类中我们都通过复写的getReader()方法返回各自的图片加载器对象。

    客户端使用

    读取Jpg

    ReaderFactory factory=new JpgReaderFactory();
    Reader  reader=factory.getReader();
    reader.read();
    

    读取Png

    ReaderFactory factory=new PngReaderFactory();
    Reader  reader=factory.getReader();
    reader.read();
    

    读取Gif

    ReaderFactory factory=new GifReaderFactory();
    Reader  reader=factory.getReader();
    reader.read();
    

    相关文章

      网友评论

        本文标题:【设计模式】工厂模式

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