【设计模式】(五)--创建型模式--工厂模式1概要及简单工厂模式

【设计模式】(五)–创建型模式–工厂模式1概要及简单工厂模式

工厂模式

工厂模式,就是创建类对象的工厂。这样创建对象时不会暴露不会对客户端暴露创建逻辑。
工厂模式可分为简单工厂、工厂方法和抽象工厂模式

简单工厂模式

工厂类处于类实例化的中心,它知道每一个产品的创建细节,按照条件创建哪一个类。因为客户端未爆露创建逻辑,所以引入新产品时无需修改客户端。但是如果有新的类加入那么将要修改工厂创建逻辑。

工厂方法模式

工厂方法模式又叫虚拟构造函数模式或者多态性工厂模式,是简单工厂模式的进一步抽象。因为使用了多态性,工厂方法模式不仅有简单工厂模式优点,而且新加入类时,无需修改原有工厂的创建逻辑。工厂类抽象为基类不进行类的创建,创建对象完全交给子类实现。所以即使加入新类,无需修改原有的工厂创建对象逻辑,只需要按照基类接口实现新的类对象的创建过程。

抽象工厂模式

抽象工厂模式是所有工厂模式的进一步抽象。比如对水果进行抽象分为苹果和橙子。使用工厂方法后,会有红富士苹果水果工厂和冰糖橙水果工厂。那如果有脐橙该如何?复制一套冰糖橙水果工厂代码到脐橙水果工厂?此时工厂方法模式拓展和维护问题就出来了。那么如果把冰糖橙工厂抽象出橙子水果工厂。冰糖橙和继承抽象为橙子。橙子水果工厂负责完成橙子的统一逻辑。冰糖橙水果工厂和脐橙水果工厂完成具体实现,那么拟补了工厂方法模式的不足。

简单工厂模式的实现

水果工厂实现
类图
在这里插入图片描述

public interface Fruit {
    void showTaste();
}

public class Apple implements Fruit {

    @Override
    public void showTaste() {
        System.out.println("苹果味道脆、甜");
    }

    public Apple() {
        this.showTaste();
    }
}

public class Orange implements Fruit {
    @Override
    public void showTaste() {
        System.out.println("橙子味道酸、甜");
    }

    public Orange() {
        this.showTaste();
    }
}

public class FruitFactory {
    public Fruit createFruit(String fruitName) {
        if ("apple".equals(fruitName)) {
            return new Apple();
        }
        if ("orange".equals(fruitName)) {
            return new Orange();
        }
        throw new RuntimeException("Unrecognized fruit!");
    }
}

public class Client {
    public static void main(String[] args) {
        FruitFactory factory = new FruitFactory();
        Fruit apple = factory.createFruit("apple");
        Fruit orange = factory.createFruit("orange");
    }
}

结果
在这里插入图片描述

原创文章 29 获赞 41 访问量 954

猜你喜欢

转载自blog.csdn.net/lovesunren/article/details/105721045
今日推荐