• 工厂模式




    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 抽象工厂

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



  • 相关阅读:
    枚举类型
    [ Java学习 ] “goto语句“ 和 “continue + 标号” 的不同待遇
    [ Java学习 ] 其他知识总结(重要)
    [ Java学习 ] Java变量以及内存分配(非常重要)
    [ Java学习 ] 包语句 package等语句的汇总整理
    [ Java学习 ] 破除思维定势之 C++ 和 Java 的差异 003
    P1601一道高精度的题
    啊哈,我又来了
    算了,有一道水题
    再水一道题
  • 原文地址:https://www.cnblogs.com/Howlet/p/12019108.html
Copyright © 2020-2023  润新知