设计模式之简单工厂模式

1.定义

属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

2.简单工厂模式结构

简单工厂模式包含如下角色:

  • Factory:工厂角色

    工厂角色负责实现创建所有实例的内部逻辑。例子中的SimpleAnimalFactory

    /**
     * 简单工厂
     */
    public class SimpleAnimalFactory {
        /**
         * 第一种方法
         * @param animalTypeEnum
         * @return
         */
        public static Animal createAnimal(AnimalTypeEnum animalTypeEnum) {
            Animal animal = null;
            switch (animalTypeEnum) {
                case Cat: animal = new Cat();
                break;
                case Dog: animal = new Dog();
                break;
                case Bird: animal = new Bird();
                break;
            }
            return animal;
        }
    
    
        /**
         * 第二种方法(jdk8)
         */
        private static Map<AnimalTypeEnum, Supplier<Animal>> map = new HashMap<>();
        static {
            map.put(AnimalTypeEnum.Bird,Bird::new);
            map.put(AnimalTypeEnum.Cat,Cat::new);
            map.put(AnimalTypeEnum.Dog,Dog::new);
        }
    
        public static Animal createAnimal2(AnimalTypeEnum animalTypeEnum) {
            return map.get(animalTypeEnum).get();
        }
    
        public static void main(String[] args) {
            Animal animal = SimpleAnimalFactory.createAnimal(AnimalTypeEnum.Dog);
            animal.say();
    
            Animal animal2 = SimpleAnimalFactory.createAnimal2(AnimalTypeEnum.Cat);
            animal2.say();
        }
    
    
    }
    
    public enum AnimalTypeEnum {
        Bird("bird"),
        Cat("cat"),
        Dog("dog");
        private String type;
    
        AnimalTypeEnum(String type) {
            this.type = type;
        }
    
        public String getType() {
            return type;
        }
    }
  • Product:抽象产品角色

    抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口。例子中的Animal

    public abstract class Animal {
        abstract public void say();
    }
  • ConcreteProduct:具体产品角色

    具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。例子中的bird、dog、cat

    public class Bird extends Animal {
        @Override
        public void say() {
            System.out.println("咕咕咕");
        }
    }
    
    public class Cat extends Animal {
        @Override
        public void say() {
            System.out.println("喵喵喵");
        }
    }

    public class Dog extends Animal {
        @Override
        public void say() {
            System.out.println("汪汪汪");
        }
    }

3.简单工厂模式分析

将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。

简单工厂模式最大的问题在于工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,这一点与开闭原则是相违背的。

简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值