工厂模式

工厂模式

工厂模式是一种创造型模式,通过工厂模式,调用者直接通过工厂类即可获取对象,不需要通过new的方式,对象的实例化细节也因此不需要调用者关注。
常用的一下三种模式。

简单工厂模式

简答工厂模式也称作静态工厂模式。
用户只需要调用的工厂的静态即可获取对象。

UML图

代码

public class CarFactory {
    public static Car getCar(String name) {
        if ("Benz".equals(name)) {
            return new BenzCar();
        } else if ("Tesla".equals(name)) {
            return new TeslaCar();
        } else {
            throw new UnsupportedOperationException();
        }
    }
}

工厂方法模式

为什么需要工厂方法模式
在简单工厂中,如果新增了一个产品,那么则需要在CarFactory中修改if-else的代码,这样违反了开闭原则(对扩展开放,对修改关闭),由此有了工厂方法模式。
工厂方法模式的核心是有一个工厂接口,所有的工厂都需要实现这个工厂接口,所以当我们新增一个产品,只需要写一个类实现产品接口,同时写一个类实现工厂接口。

UML图

代码


public class TeslaFactory implements Factroy {
    @Override
    public Car getCar() {
        return new TeslaCar();
    }
}

抽象工厂模式

为什么需要抽象工厂模式
在以上两种工厂模式中,只存在一种产品。
抽象工厂模式的着眼点是一系列的产品。
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

产品结构和产品族

同一类产品,比如小米手机和华为手机就是属于同一个产品结构。
同一系列的产品,比如小米手机和小米路由器,华为手机和华为路由器就是属于同一个产品族。

UML图

代码

public interface SuperFactory {
    Phone getPhone();

    Router getRouter();
}

public class HuaWeiFactory implements SuperFactory {
    @Override
    public Phone getPhone() {
        return new HuaWeiPhone();
    }

    @Override
    public Router getRouter() {
        return new HuaWeiRouter();
    }
}
posted @ 2020-09-10 20:08  刃牙  阅读(160)  评论(0编辑  收藏  举报