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



    1. 工厂模式(Factory Pattern)


    把创建对象的工作交由工厂来完成,我们负责向工厂拿取就行,这样就不用关注创建的逻辑,也实现了解耦。

    之前用过的 DbUtils,SpringIoc都有解耦,降低代码间的依赖性


    工厂模式解耦,复杂的初始化过程由工厂完成,只需在工厂修改,不用再每一次出现的位置做修改



    2. 具体实现

    这里分为三种:

    • 简单工厂
    • 工厂方法
    • 抽象工厂

    2.1 简单工厂

    在一个工厂里面可以直接生产需要的产品


    1.创建实体类接口

    public interface Animal {
    	abstract void eat();
    }
    

    2.创建实体类,猫和狗

    public class Cat implements Animal {
    
    	public void eat() {
    		System.out.println("猫吃鱼");
    	}
    }
    
    public class Dog implements Animal {
    
    	public void eat() {
    		System.out.println("狗吃肉");
    	}
    }
    

    3.创建工厂

    public class SimpleFactory {
    	
    	public static Animal getAnimal(String animal){
    		
    		if(animal.equalsIgnoreCase("Cat")){
    			return new Cat();
    		}
    		if(animal.equalsIgnoreCase("Dog")){
    			return new Dog();
    		}
    		return null;
    	}
    }
    

    4.调用

    Animal cat = SimpleFactory.getAnimal("cat");
    cat.eat();
    
    Animal dog = SimpleFactory.getAnimal("dog");
    dog.eat();
    
    //猫吃鱼
    //狗吃肉
    


    2.2 工厂方法

    与简单工厂不同的是,工厂方法每个工厂专门生产一种产品,有多少种产品就有多少种工厂


    1.创建工厂接口

    public interface FactoryMethod {
    	abstract Animal getAnimal();
    }
    

    2.创建工厂实体

    public class CatFactory implements FactoryMethod {
    
    	public Animal getAnimal() {
    		return new Cat();
    	}
    }
    
    public class DogFactory implements FactoryMethod {
    
    	public Animal getAnimal() {
    		return new Dog();
    	}
    }
    

    3.调用

    CatFactory cf = new CatFactory();
    // 从猫工厂拿到一只猫
    Animal cat = cf.getAnimal();
    cat.eat();
    
    DogFactory df = new DogFactory();
    // 从狗工厂拿到一条狗
    Animal dog = df.getAnimal();
    dog.eat();
    



    2.3 抽象工厂

    过于累赘,就是往工厂再套上一层工厂,一个顶级工厂生产下级工厂,这些不同的下级工厂生产不同的产品,方法与上面类似



  • 相关阅读:
    git介绍
    Oracle '26-2月 -19 03.34.47.000000 下午' 字符串日期解析
    ProceedingJoinPoint 某些方法记录一下
    SpringBoot 2.X以上集成redis
    SpringBoot文件上传配置
    editmd输出到前端显示
    Thymeleaf Shiro标签
    Springboot 添加druid监控
    基于SpringBoot的博客项目
    SpringBoot默认首页配置
  • 原文地址:https://www.cnblogs.com/Howlet/p/12019108.html
Copyright © 2011-2022 走看看