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

    工厂模式针对单个维度进行分类,抽象工厂模式针对多个维度进行分类。

    示例

    image

    (1)第1类产品接口及实现类的定义

    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";
        }
    }

    (2)第2类产品接口及实现类的定义

    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";
        }
    }

    (3)工厂定义

    public abstract class AbstractFactory{
        public abstract Phone createPhone(String brand);
        public abstract Computer createComputer(String brand);
    }
    
    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;
        }
    }
    
    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;
            }
        }
    }

    (4)使用抽象工厂

    AbstractFactory phoneFactory = new PhoneFactory();
    Phone phoneHuawei = phoneFactory.createPhone("huawei");
    Phone phoneApple = phoneFactory.createPhone("apple");
    logger.info(phoneHuawei.call());
    logger.info(phoneApple.call());
    
    AbstractFactory computerFactory = new ComputerFactory();
    Computer computerHuawei = computerFactory.createComputer("huawei");
    Computer computerApple = computerFactory.createComputer("apple");
    logger.info(computerHuawei.internet());
    logger.info(computerApple.internet());

  • 相关阅读:
    qemu进程页表和EPT的同步问题
    Linux进程虚拟地址空间管理2
    qemu-kvm内存虚拟化1
    LInux进程虚拟地址空间的管理
    Linux下的文件系统2
    LInux中的文件系统1
    Linux IPC之管道通信
    操作系统中的特权级检查
    Linux下的信号机制
    进程的挂起、阻塞和睡眠
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15222437.html
Copyright © 2011-2022 走看看