zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式

    简单工厂

      简单工厂其实不是一个设计模式,反而更像一种编程习惯。如下,将产生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();
        }
    }
    
  • 相关阅读:
    操作系统_3:linux教程列表
    MongoEngine 查询语法
    Spark_1:教程索引
    软件需求十步走之阅读笔记03
    软件需求十步走之阅读笔记02
    软件需求十步走之阅读笔记01
    暑期学习四
    暑期学习三
    暑期学习二
    暑期学习一
  • 原文地址:https://www.cnblogs.com/liuyang0/p/6391425.html
Copyright © 2011-2022 走看看