java设计模式-(简单)工厂模式

定义:

属于创建模式的一种。在创建对象的时候,不会对客户端暴露创建逻辑,只提供一个共同的接口指向新创建的对象。定义一个创建对象的接口,让子类决定实例化哪一个工厂类,将创建对象的过程延迟到子类进行。

应用场景:

接口选择。主要解决,在确定的情况下,根据不同条件创造不同的实例。

优点:

  1. 屏蔽实例对象的具体创造逻辑,调用者只了解创造对象的接口就可以了 
  2. 调用者想要哪一种类型对象,只需要告诉工厂这个对象的唯一标识(名称,枚举,属性值)就可以
  3. 可扩展性高,如果需要新增加一个子类,只需要增加一个工厂类和一个子类就可以

缺点:

  1. 也是第三个优点,那么就是,每次增加一个子类,都需要再增加一个工厂类,增加代码冗余

应用实例:

  1. ORM框架适配数据库,框架只需要更换数据库的方言和驱动就可以使用。
  2. 日志记录。用户可以选择日志记录在数据库、硬盘等。
  3. 远程服务类型。rest和webservice。

演示代码:

接口定义:

package com.study.designPattern.factoryPattern.factoryInterface;

/**
 * 简单工厂模式,动物接口
 */
public interface Animal {
    /**
     * 说话方法
     */
    void say();
}

 

实现类定义:

Dog:

package com.study.designPattern.factoryPattern.factoryInterface.com.study.designPattern.factoryPattern.factoryInterface.impl;

import com.study.designPattern.factoryPattern.factoryInterface.Animal;

public class Dog implements Animal {
    @Override
    public void say() {
        System.out.println("我是一只小狗子,我说汪汪汪");
    }
}

Cat:

package com.study.designPattern.factoryPattern.factoryInterface.com.study.designPattern.factoryPattern.factoryInterface.impl;

import com.study.designPattern.factoryPattern.factoryInterface.Animal;

public class Cat implements Animal {
    @Override
    public void say() {
        System.out.println("我是一只小猫咪,我说喵喵喵");
    }
}

Pig:

package com.study.designPattern.factoryPattern.factoryInterface.com.study.designPattern.factoryPattern.factoryInterface.impl;

import com.study.designPattern.factoryPattern.factoryInterface.Animal;

public class Pig implements Animal {
    @Override
    public void say() {
        System.out.println("我是一只小猪猪,我说哼哼哼");
    }
}

工厂类:

package com.study.designPattern.factoryPattern.factoryInterface.com.study.designPattern.factoryPattern.factory;

import com.study.designPattern.factoryPattern.factoryInterface.Animal;
import com.study.designPattern.factoryPattern.factoryInterface.com.study.designPattern.factoryPattern.factoryInterface.impl.Cat;
import com.study.designPattern.factoryPattern.factoryInterface.com.study.designPattern.factoryPattern.factoryInterface.impl.Dog;
import com.study.designPattern.factoryPattern.factoryInterface.com.study.designPattern.factoryPattern.factoryInterface.impl.Pig;

/**
 * 工厂模式,动物工厂
 */
public class AnimalFactory {
    /**
     * 根据动物类型创造动物
     * @param animalType
     * @return
     */
    public Animal createAnimal(String animalType){
        switch (animalType){
            case "DOG":
                return new Dog();
            case "CAT":
                return new Cat();
            case "PIG":
                return new Pig();
                default:
                    return null;
        }
    }
}

测试类:

package com.study.designPattern.factoryPattern.factoryInterface.com.study.designPattern.factoryPattern;

import com.study.designPattern.factoryPattern.factoryInterface.Animal;
import com.study.designPattern.factoryPattern.factoryInterface.com.study.designPattern.factoryPattern.factory.AnimalFactory;

public class AnimalDemo {
    public static void main(String[] args) {
        AnimalFactory animalFactory = new AnimalFactory();
        Animal dog = animalFactory.createAnimal("DOG");
        dog.say();
        System.out.println("---------我是一个分割线-------");
        Animal cat = animalFactory.createAnimal("CAT");
        cat.say();
        System.out.println("---------我是一个分割线-------");
        Animal pig = animalFactory.createAnimal("PIG");
        pig.say();
    }
}

结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值