设计模式-创建型模式-工厂模式

一、简单工厂模式

定义

定义一个工厂类,他可以根据不同的参数,创建不同的实例。众多实例之间有着共同的父类或者接口。实现此功能的方法一般为静态方法

优点

需要什么,仅仅需要传入一个或者多个参数,就能获取到实例,而无需知道其内部的实现过程

在简单工厂模式中,用于创建实例的方法通常为静态方法(static),因此简单工厂模式又被成为 静态工厂方法

uml 图

代码

package simple;

/**
 * @author mrhy
 * @date 2021/1/2 09:37
 * Copyright (C), 2018-2021
 */
public class BaoShiJie implements Car {
    @Override
    public String name() {
        return "我是保时捷";
    }
}

package simple;

/**
 * 兰博基尼
 *
 * @author mrhy
 * @date 2021/1/2 09:38
 * Copyright (C), 2018-2021
 */
public class LanBoJiNi implements Car {
    @Override
    public String name() {
        return "我是兰博基尼";
    }
}

package simple;

/**
 * 汽车接口
 *
 * @author mrhy
 * @date 2021/1/2 09:36
 * Copyright (C), 2018-2021
 */
public interface Car {
    String name();
}

package simple;

/**
 * 汽车工厂
 *
 * @author mrhy
 * @date 2021/1/2 09:39
 * Copyright (C), 2018-2021
 */
public class CarFactory {

    public static Car createCar(String name) {
        if ("lanbo".equals(name)) {
            return new LanBoJiNi();
        } else if ("baoshijie".equals(name)) {
            return new BaoShiJie();
        } else {
            throw new RuntimeException("未找到车");
        }

    }

    public static void main(String[] args) {
        Car lanbo = CarFactory.createCar("lanbo");
        System.out.println(lanbo.name());
        Car baoshijie = CarFactory.createCar("baoshijie");
        System.out.println(baoshijie.name());
    }
}

二、工厂方法模式

定义

工厂方法模式(FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品

优点

封装内部的实现过程,便于拓展

uml图

代码

package factorymethod;

/**
 * 汽车接口
 *
 * @author mrhy
 * @date 2021/1/2 09:36
 * Copyright (C), 2018-2021
 */
public interface Car {
    String name();
}

package factorymethod;

/**
 * 工厂方法的抽象类
 *
 * @author mrhy
 * @date 2021/1/3 10:15
 * Copyright (C), 2018-2021
 */
public  interface Factory {
     Car newCar();


}
package factorymethod;

/**
 * @author mrhy
 * @date 2021/1/2 09:37
 * Copyright (C), 2018-2021
 */
public class BaoShiJie implements Car {
    @Override
    public String name() {
        return "我是保时捷";
    }
}

package factorymethod;

import simple.CarFactory;

/**
 * 汽车工厂
 *
 * @author mrhy
 * @date 2021/1/2 09:39
 * Copyright (C), 2018-2021
 */
public class BaoshijieCarFactory implements Factory {

    @Override
    public Car newCar() {
        return new BaoShiJie();
    }
}

package factorymethod;

/**
 * @author mrhy
 * @date 2021/1/3 10:21
 * Copyright (C), 2018-2021
 */
public class LanboCarFactory implements Factory {
    @Override
    public Car newCar() {
        return new LanBoJiNi();
    }

    public static void main(String[] args) {
        Car baoshijie = new BaoshijieCarFactory().newCar();
        System.out.println(baoshijie.name());
        LanboCarFactory lanboCarFactory = new LanboCarFactory();
        System.out.println(lanboCarFactory.newCar().name());
    }
}


package factorymethod;

/**
 * 兰博基尼
 *
 * @author mrhy
 * @date 2021/1/2 09:38
 * Copyright (C), 2018-2021
 */
public class LanBoJiNi implements Car {
    @Override
    public String name() {
        return "我是兰博基尼";
    }
}

posted @ 2021-01-04 15:14  小憨马  阅读(62)  评论(0)    收藏  举报