美文网首页
设计模式-工厂方法模式

设计模式-工厂方法模式

作者: 圣村的希望 | 来源:发表于2021-03-20 16:52 被阅读0次
    工厂方法模式思维导图.png

    1.介绍:

         工厂方法模式顾名思义就是创建产品的,这里的产品在Java程序里面就是一个个对象,该模式就是用于封装对象的创建,是一种创建型模式。根据抽象程度的不同,它又分为:简单工厂模式、工厂方法模式和抽象工厂模式。

    2.代码实例:

    2.1:简单工厂方法模式:

         简单工厂模式其实不属于设计模式中的一种,他是把对象创建的一个简单封装,根据传递的参数创建不同的对象。

    • 工厂生产的对象产品抽象
    public interface Phone {
        void show();
    }
    
    • 具体产品
    public class IPhone implements Phone {
    
        public IPhone() {
            this.show();
        }
    
        @Override
        public void show() {
            System.out.println("make apple phone");
        }
    }
    
    
    public class MiPhone implements Phone {
    
        public MiPhone() {
            this.show();
        }
    
        @Override
        public void show() {
            System.out.println("make mi phone");
        }
    }
    
    • 生产手机的简单工厂
    public class SimpleFactory {
    
        //生产手机产品的静态方法
        public static Phone createPhone(String type) {
            if (type.equalsIgnoreCase("MiPhone")) {
                return new MiPhone();
            } else {
                return new IPhone();
            }
        }
    }
    
    • 客户端使用简单工厂方法
    public class Client {
    
        public static void main(String[] args) {
            Phone miPhone = SimpleFactory.createPhone("MiPhone");
            Phone iphone = SimpleFactory.createPhone("Iphone");
            System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
            System.out.println("iphone type " + iphone.getClass().getSimpleName());
        }
    }
    
    //控制台输出:
    make mi phone
    make apple phone
    miPhone type MiPhone
    iphone type IPhone
    
    • 简单工厂方法UML类图展示:


      简单工厂方法类图.png

    2.2:工厂方法模式:

         工厂方法模式是在简单工厂方法模式之上进行了一层抽象,把对象创建的方法抽象成一个接口,每一个具体的产品由一个具体的工厂来产生。

    • AbstractFactory类
    public interface AbstractFactory {
    
        Phone createPhone();
    }
    
    • MiPhonoeFactory类,生产MiPhone对象
    public class MiPhoneFactory implements AbstractFactory {
    
        @Override
        public Phone createPhone() {
            return new MiPhone();
        }
    }
    
    • IPhoneFactory类,生产IPhone对象
    public class IPhoneFactory implements AbstractFactory {
    
        @Override
        public Phone createPhone() {
            return new IPhone();
        }
    }
    
    • Client客户端的使用
    public class Client {
    
        public static void main(String[] args) {
    //        Phone miPhone = SimpleFactory.createPhone("MiPhone");
    //        Phone iphone = SimpleFactory.createPhone("Iphone");
    //        System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
    //        System.out.println("iphone type " + iphone.getClass().getSimpleName());
    
    
            AbstractFactory miPhoneFactory = new MiPhoneFactory();
            AbstractFactory iphoneFactory = new IPhoneFactory();
            Phone miPhone = miPhoneFactory.createPhone();
            Phone iphone = iphoneFactory.createPhone();
            System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
            System.out.println("iphone type " + iphone.getClass().getSimpleName());
        }
    
    //控制台输出:
    make mi phone
    make apple phone
    miPhone type MiPhone
    iphone type IPhone
    
    • 工厂方法模式UML类图展示:


      工厂方法模式UML类图.png

    2.3抽象工厂方法模式:

         抽象工厂方法模式是在工厂方法模式之上再进行抽象的,抽象工厂不再是像工厂方法模式那样只生成一个产品,抽象工厂方法模式是生成一系列的配套产品。抽象工厂就类似小米这个品牌,它能够生成电脑、手机和手环等一系列配套的产品。

    • AbFactory类
    public interface AbFactory {
    
        Phone createPhone();
    
        PC createPC();
    }
    
    • PC产品
    public interface PC {
        void show();
    }
    
    public class MiPC implements PC {
    
        public MiPC() {
            this.show();
        }
    
        @Override
        public void show() {
            System.out.println("make mi pc");
        }
    }
    
    public class MacPC implements PC {
    
        public MacPC() {
            this.show();
        }
    
        @Override
        public void show() {
            System.out.println("make mac pc");
        }
    }
    
    • MiFactory
    public class MiFactory implements AbFactory {
    
        @Override
        public Phone createPhone() {
            return new MiPhone();
        }
    
        @Override
        public PC createPC() {
            return new MiPC();
        }
    }
    
    • AppleFactory
    public class AppleFactory implements AbFactory {
    
        @Override
        public Phone createPhone() {
            return new IPhone();
        }
    
        @Override
        public PC createPC() {
            return new MacPC();
        }
    }
    
    • Client客户端使用类
    public class Client {
    
        public static void main(String[] args) {
    //        Phone miPhone = SimpleFactory.createPhone("MiPhone");
    //        Phone iphone = SimpleFactory.createPhone("Iphone");
    //        System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
    //        System.out.println("iphone type " + iphone.getClass().getSimpleName());
    
    //        AbstractFactory miPhoneFactory = new MiPhoneFactory();
    //        AbstractFactory iphoneFactory = new IPhoneFactory();
    //        Phone miPhone = miPhoneFactory.createPhone();
    //        Phone iphone = iphoneFactory.createPhone();
    //        System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
    //        System.out.println("iphone type " + iphone.getClass().getSimpleName());
    
            AbFactory miAbstractFactory = new MiFactory();
            AbFactory appleAbstractFactory = new AppleFactory();
            Phone miPhone = miAbstractFactory.createPhone();
            PC miPC = miAbstractFactory.createPC();
            Phone iphone = appleAbstractFactory.createPhone();
            PC macPC = appleAbstractFactory.createPC();
            System.out.println("miPhone type " + miPhone.getClass().getSimpleName());
            System.out.println("miPC type " + miPC.getClass().getSimpleName());
            System.out.println("iphone type " + iphone.getClass().getSimpleName());
            System.out.println("macPC type " + macPC.getClass().getSimpleName());
        }
    }
    
    • 抽象工厂模式UML类图:


      抽象工厂模式.png

    3.使用场景:

         简单工厂模式就是一个很简单的对对象创建的封装,工厂方法模式是对每一个具体产品创建的封装,每一个产品对应有一个具体的工厂来创建,而抽象工厂模式是针对一系列产品对象的创建。3种工厂模式是在抽象层度上的不同,对于不同场景选择不同的工厂模式进行对象创建的封装。

    3.1: 工厂方法模式的使用:

         在Java中就有工厂方法模式的使用:线程工厂的封装就是用来创建线程池,具体的线程创建交给具体的工厂实现。

    public interface ThreadFactory {
    
        Thread newThread(Runnable r);
    }
    

    相关文章

      网友评论

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

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