• 设计模式之工厂模式


    简单工厂

      简单工厂其实不是一个设计模式,反而更像一种编程习惯。如下,将产生Pizza的代码分离出来作为工厂。

    public class SimplePizzaFactory {
        public Pizza createPizza(String type) {
            Pizza pizza = null;
    
            if ("cheese".equals(type)) {
                pizza = new CheesePizza();
            } else if ("clam".equals(type)) {
                pizza = new ClamPizza();
            }
            return pizza;
        }
    }
    

    工厂方法

    工厂方法:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

      如下就是一个工厂方法的示意图。

    工厂方法

      PizzaStore中定义了一个抽象方法createPizza,然后由子类来决定如何进行实例化。

    public abstract class PizzaStore {
        public Pizza orderPizza(String type) {
            Pizza pizza;
    
            pizza = createPizza(type);
    
            //其他操作
    
            return pizza;
        }
    
        abstract Pizza createPizza(String type);
    }
    
    public class WuHanPizzaStore extends PizzaStore {
        @Override
        Pizza createPizza(String type) {
            Pizza pizza = null;
    
            if ("cheese".equals(type)) {
                pizza = new CheesePizza();
            } else if ("clam".equals(type)) {
                pizza = new ClamPizza();
            }
            return pizza;
        }
    }
    

    抽象工厂

    抽象工厂:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

      如下就是一个抽象工厂示意图。

    抽象工厂

      如下PizzaIngredientFactory接口就是一个抽象工厂,在相关的家族类中实现这个接口,编写特定的创建实例方法。

    public interface PizzaIngredientFactory {
        public Cheese createCheese();
        public Clam createClam();
    }
    
    public class WuHanPizzaIngredientFactory implements PizzaIngredientFactory {
        @Override
        public Cheese createCheese() {
            return new ReggianoCheese();
        }
        @Override
        public Clam createClam() {
            return new FreshClam();
        }
    }
    
  • 相关阅读:
    Python基础
    熟悉常见的Linux操作
    大数据概述
    实验报告(3)-语法分析
    LL(1)文法
    简化版C语言文法
    实验报告(1)-词法分析
    中文词频统计
    综合练习:英文词频统计
    字符串练习
  • 原文地址:https://www.cnblogs.com/liuyang0/p/6391425.html
Copyright © 2020-2023  润新知