zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    简介

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

    具体实现

      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
  • 相关阅读:
    myeclipse 自动部署web项目(自动编译)
    A股、B股区别
    vi分屏指令
    并发用户数与TPS之间的关系
    单台机器安装zookeeper
    Flask-sqlalchemy使用alembic迁移模型_示例1
    Excel VBA 判断是否打开了某个Excel文件
    Excel VBA 从一个带文件夹名和文件名的字符串里提取文件夹名和文件名
    混合编程 从Excel VBA里调用Python模块文件
    Excel VBA 如何在工作表上使用Option Button按钮
  • 原文地址:https://www.cnblogs.com/silentteller/p/12799452.html
Copyright © 2011-2022 走看看