• 抽象工厂模式


    简介

      抽象工厂模式在工厂模式上添加了一个创建不同工厂的抽象接口(抽象类或接口实现),该接口可叫做超级工厂。在使用过程中,我们首先通过抽象接口创建出不同的工厂对象,然后根据不同的工厂对象创建不同的对象。

    具体实现

      1.抽象工厂定义如下

    public abstract class AbstractFactory {
        public abstract Phone createPhone(String brand);
        public abstract Computer createComputer(String brand);
    }

      抽象类AbstractFactory,是抽象工厂的核心类,它定义了两个方法,分别返回手机和电脑。

      2.手机接口及其实现类

    public interface Phone {
        String call();
    }
    public class PhoneApple implements Phone {
        @Override
        public String call() {
            return "call somebody by apple phone";
        }
    }
    public class PhoneHuaWei implements Phone {
        @Override
        public String call() {
            return "call somebody by huawei phone";
        }
    }

      3.电脑接口及其实现类

    public interface Computer {
        String internet();
    }
    public class ComputerApple implements Computer {
        @Override
        public String internet() {
            return "surf the internet by apple computer";
        }
    }
    public class ComputerHuaWei implements Computer {
        @Override
        public String internet() {
            return "surf the internet by huawei computer";
        }
    }

      4手机工厂类定义如下

    public class PhoneFactory extends AbstractFactory {
        @Override
        public Phone createPhone(String brand) {
            if("HuaWei".equals(brand)){
                return new PhoneHuaWei();
            }else if("Apple".equals(brand)){
                return new PhoneApple();
            }else
                return null;
        }
    
        @Override
        public Computer createComputer(String brand) {
            return null;
        }
    }

      5.电脑工厂类定义如下

    public class ComputerFactory extends AbstractFactory {
        @Override
        public Phone createPhone(String brand) {
            return null;
        }
    
        @Override
        public Computer createComputer(String brand) {
            if("HuaWei".equals(brand)){
                return new ComputerHuaWei();
            }else if("Apple".equals(brand)){
                return new ComputerApple();
            }else
                return null;
        }
    }

      6使用抽象工厂模式

    public class Test {
        public static void main(String[] args) {
            AbstractFactory phoneFactory = new PhoneFactory();
            Phone phoneHuawei = phoneFactory.createPhone("HuaWei");
            Phone phoneApple = phoneFactory.createPhone("Apple");
            System.out.println(phoneApple.call());
            System.out.println(phoneHuawei.call());
    
            AbstractFactory computerFactory = new ComputerFactory();
            Computer computerHuawei = computerFactory.createComputer("HuaWei");
            Computer computerApple = computerFactory.createComputer("Apple");
            System.out.println(computerApple.internet());
            System.out.println(computerHuawei.internet());
        }
    }

      结果

    call somebody by apple phone
    call somebody by huawei phone
    surf the internet by apple computer
    surf the internet by huawei computer
  • 相关阅读:
    (单例)使用同步基元变量来检测程序是否已运行
    使用委托解决方法的跨线程调用问题
    Rtmp/Hls直播、点播服务器部署与配置
    关于C#调用广州医保HG_Interface.dll调用的一些总结(外部组件异常)
    redhat7.3配置163 yum源
    模块化InnoSetup依赖项安装
    [迷宫中的算法实践]迷宫生成算法——递归分割算法
    [新手学Java]使用beanUtils控制javabean
    【HTML5】Canvas绘图详解-1
    【Swift 】- 闭包
  • 原文地址:https://www.cnblogs.com/silentteller/p/12799452.html
Copyright © 2020-2023  润新知