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

  • 相关阅读:
    10465
    移动Web开发图片自适应两种常见情况解决方案
    [置顶] Spring的DI依赖实现分析
    Android中两种设置全屏或者无标题的方法
    Esper系列(十二)Variables and Constants
    Esper系列(十一)NamedWindow语法Merge、Queries、Indexing、Dropping
    Esper系列(十)NamedWindow语法delete、Select+Delete、Update
    Esper系列(九)NamedWindow语法create、Insert、select
    Esper系列(八)Method Definition、Schema
    Docker系列(五)OVS+Docker网络打通示例
  • 原文地址:https://www.cnblogs.com/betterwgo/p/15222437.html
Copyright © 2011-2022 走看看