zoukankan      html  css  js  c++  java
  • 02 【创建型】抽象工厂模式 理解与使用

    抽象工厂

    大白话:一个最大的抽象工厂,它里面不仅有生产手机的工厂,也有生产家用电器的工厂,工厂里面套工厂,这就是抽象工厂,通过工厂生产出需要的工厂,再有生产出的工厂建造

    生产不一样的产品

     开个玩笑,我怎么可能做PHP呢 JAVA是世界上最好的语言,没有之一

    就按照这个例子,有一家抽象工厂,它可以有生产手机和生产电器的工厂,它的工厂有具体的实现类(小米或者华为的工厂)

    按照图形化来理解

    1、创建一个生产手机的工厂

    public interface PhoneFactory {
    
        //生产方法
        void create();
    }

    2、创建一个生产电器的工厂

    //电器工厂,生产电器
    public interface DianFactory {
    
        //创造电器
        void createDian();
    
    }

    3、创建一个抽象工厂,这个抽象工厂可以同时生产电器、手机

    public abstract class Factory {
    
        //获取手机工厂
        public abstract PhoneFactory getPhoneFactory(String type);
    
        //获取电器工厂
        public abstract DianFactory getDianFactory(String type);
    
    }

    4、具体的抽象工厂继承类 比如小米可以生产、华为也可以生产

    //小米工厂
    public class XiaoMiFactory extends Factory {
    
        @Override
        public PhoneFactory getPhoneFactory(String type) {
            return new XiaomiPhone();
        }
    
        @Override
        public DianFactory getDianFactory(String type) {
            return new XiaoMiDian();
        }
    }

    小米手机的工厂生产小米手机、小米电器

    public class XiaomiPhone implements PhoneFactory {
    
        @Override
        public void create() {
            System.out.println("小米手机");
        }
    }
    public class XiaoMiDian implements DianFactory {
    
        @Override
        public void createDian() {
            System.out.println("小米生产电器");
        }
    }

    同理、华为也可以继承工厂类、它也可以生产手机和电器

    public class HuaWeiFactory extends Factory {
    
        @Override
        public PhoneFactory getPhoneFactory(String type) {
            return new HuaWeiPhone();
        }
    
        @Override
        public DianFactory getDianFactory(String type) {
            return new HuaWeiDian();
        }
    }
    public class HuaWeiPhone implements PhoneFactory {
    
        @Override
        public void create() {
            System.out.println("生产华为手机");
        }
    }
    public class HuaWeiDian implements DianFactory {
    
        @Override
        public void createDian() {
            System.out.println("华为电器");
        }
    }

    5.创建一个工厂调度器,来取出需要的工厂

    public class FactoryProducer {
    
        //按照名称获取工厂
        public static Factory getFactory(String name){
    
            if ("XIAOMI".equals(name)) {
                return new XiaoMiFactory();
            } else if ("HUAWEI".equals(name)) {
                return new HuaWeiFactory();
            }
            return null;
        }
    }

    最后我们main方法测试,传入HUAWEI, 则调出的是华为工厂,然后调用华为生产手机或者华为生产电器即可

    public static void main(String[] args) {
    
    
            Factory factory = getFactory("HUAWEI");
    
            PhoneFactory phoneFactory = factory.getPhoneFactory(null);
    
            phoneFactory.create();
    
        }

    参考:https://www.runoob.com/design-pattern/design-pattern-intro.html

    码云:https://gitee.com/mrc1999/23GOF

  • 相关阅读:
    android manifest.xml 文件
    android 打开 res raw目录 中 数据库文件
    android intentService
    android 注册广播接受者
    android activity 窗口 样式
    android activity 生命周期
    android 后台 activity 被系统回收 保存状态
    Python的包管理工具easy_install, setuptools, pip,distribute介绍
    Python的包管理工具easy_install, setuptools, pip,distribute介绍
    MySQL 1071错误解决办法
  • 原文地址:https://www.cnblogs.com/ChromeT/p/11768091.html
Copyright © 2011-2022 走看看