2019-02-15——设计模式 工厂模式

工厂模式分为三种:

1. 简单工厂
特点:一个工厂类根据传入的参量决定创建出那一种产品类的实例,如果想要增加一个产品,需要修改工厂类,该设计破坏了开闭原则。

public interface Fruit {
}

public class Apple implements Fruit {
}

public class Orange implements Fruit {
}

public class SimpleFactory {
    public static Fruit createFruit(String name){
        if("apple".equals(name)){
            return new Apple();
        }else if("orange".equals(name)){
            return new Orange();
        }else{
            throw new RuntimeException("unknown fruit name");
        }
    }
}

public class T {
    public static void main(String[] args) {
        Fruit apple = SimpleFactory.createFruit("apple");
    }
}

2. 工厂方法
特点:定义一个用于创建产品的接口,由子类决定生产什么产品。每个产品都对应了一个创建者,每个创建者独立负责创建对应的产品对象,非常符合单一职责原则。但是每增加一个产品都需要增加一个对应的工厂实现,增加了系统的复杂性

public interface Fruit {
}

public class Apple implements Fruit {
}

public class Orange implements Fruit {
}

public interface FruitFactory {
    Fruit createFruit();
}

public class AppleFactory implements FruitFactory {
    @Override
    public Fruit createFruit() {
        return new Apple();
    }
}

public class OrangeFactory implements FruitFactory {
    @Override
    public Fruit createFruit() {
        return new Orange();
    }
}

public class T {
    public static void main(String[] args) {
        FruitFactory appleFactory = new AppleFactory();
        Fruit apple = appleFactory.createFruit();
        FruitFactory orangeFactory = new OrangeFactory();
        Fruit orange = orangeFactory.createFruit();
    }
}

3. 抽象工厂
特点:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。创建相关或依赖对象的家族,而无需明确指定具体类,但是在新增一个产品时,需要修改工厂接口及其子类,破坏了开闭原则

public interface Staple {
}


public class Flour implements Staple {
}


public class Rice implements Staple {
}


public interface Dish {
}


public class Cabbage implements Dish {
}


public class Radish implements Dish{
}


public interface FoodFactory {
    Staple createStaple();
    Dish createDish();
}


public class NorthFood implements FoodFactory {
    @Override
    public Staple createStaple() {
        return new Flour();
    }

    @Override
    public Dish createDish() {
        return new Radish();
    }
}


public class SouthFood implements FoodFactory {
    @Override
    public Staple createStaple() {
        return new Rice();
    }

    @Override
    public Dish createDish() {
        return new Cabbage();
    }
}


public class T {
    public static void main(String[] args) {
        FoodFactory southFoodFactory = new SouthFood();
        Dish cabbage = southFoodFactory.createDish();
        Staple rice = southFoodFactory.createStaple();

        FoodFactory norFoodFactory = new NorthFood();
        Dish rasidh = southFoodFactory.createDish();
        Staple flour = southFoodFactory.createStaple();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,378评论 1 15
  • 设计原则: 要依赖抽象,不要依赖具体类 目录 本文的结构如下: 什么是抽象工厂模式 为什么要用该模式 模式的结构 ...
    w1992wishes阅读 4,801评论 0 6
  • 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。通常我们所说的工厂模式是指工厂方法模...
    zfylin阅读 5,098评论 0 7
  • 打假必备款之区块链技术 都说2018年区块链超级火,凡是和区块链沾点边的新闻点击率都很高,上至企业老板下至普通员工...
    艺术区AET阅读 1,124评论 0 0
  • 2018第2场雪,前天上午停,前晚开下,昨早全体出动,还未扫完再次开下,鼓楼周边首见铲车扫雪。为赶时间压雪骑行,遇...
    自在阳子阅读 2,166评论 4 5