• 设计模式之 抽象工厂模式


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

    示例

    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());

  • 相关阅读:
    simian 查找项目中的重复代码
    idea 启动 ShardingProxy
    kafka 加密通信,python-kafka 访问加密服务器
    apt-get 修改源
    短轮询、长轮询、SSE 和 WebSocket
    前端模块化:CommonJS,AMD,CMD,ES6
    Set、Weak Set、Map、Weak Map学习笔记
    博客园应该如何运营
    Vue中Route的对象参数和常用props传参
    Dapper的新实践,Dapper.Contrib的使用与扩展
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15222437.html
Copyright © 2020-2023  润新知