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
  • 相关阅读:
    使用form表单上传文件
    繁星——JQuery选择器之层级
    繁星——jquery的data()方法
    running programmer——spring-01(初谈spring)
    django+javascrpt+python实现私有云盘代码
    prometheus+grafana 监控生产环境机器的系统信息、redis、mongodb以及jmx
    运维管理后台
    django+javascrpt+python实现私有云盘
    python logging模块
    python hashlib模块
  • 原文地址:https://www.cnblogs.com/silentteller/p/12799452.html
Copyright © 2011-2022 走看看