设计模式 – 工厂模式

1 简单工厂模式

简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。
优点:客户端不需要再负责对象的创建,仅仅调用工厂,工厂帮你创建需要的对象。并且把对象的创建和使用进行解耦,方便管理。
缺点:违反了开闭原则。
demo:水果工厂制作水果

在这里插入图片描述

public abstract class Fruit {

    public abstract String getName();
}


public class Apple extends Fruit {
    @Override
    public String getName() {
        return "苹果";
    }
}

public class Orange extends Fruit {
    @Override
    public String getName() {
        return "橙子";
    }
}

public class SimpleFruitFactory {

    public Fruit getFruit(String name) {

        if (name.equals("apple")) {
            return new Apple();
        } else if (name.equals("orange")) {
            return new Orange();
        } else {
            return null;
        }
    }

}

public class SimpleTest {

    public static void main(String[] args) {

        SimpleFruitFactory factory=new SimpleFruitFactory();
        Fruit fruit= factory.getFruit("apple");

        System.out.println(fruit.getName());


    }

}


在这里插入图片描述

2 工厂方法模式

为了解决开闭原则,将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(创建)哪一个类。
优点:单一原则,开闭原则
缺点:添加新产品时,除了增加新产品类外,还要提供与之对应的具体工厂类,系统类的个数将成对增加,在一定程度上增加了系统的复杂度;

demo:
在这里插入图片描述


public abstract class Fruit {

    public abstract String getName();
}


public class Apple extends Fruit {
    @Override
    public String getName() {
        return "苹果";
    }
}

public class Orange extends Fruit {
    @Override
    public String getName() {
        return "橙子";
    }
}

public abstract class MethodFruitFactory {

    public abstract Fruit getFruit();

}

public class AppleFruitFactory extends MethodFruitFactory {
    @Override
    public Fruit getFruit() {
        return new Apple();
    }
}

public class OrangeFruitFactory extends MethodFruitFactory {
    @Override
    public Fruit getFruit() {
        return new Orange();
    }
}

public class MethodTest {

    public static void main(String[] args) {

        MethodFruitFactory factory = new AppleFruitFactory();
        Fruit fruit = factory.getFruit();
        System.out.println(fruit.getName());

    }

}



在这里插入图片描述

3 抽象工厂模式

定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口(产品族),且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
优点:当增加一个新的产品族时不需要修改原代码,满足开闭原则。
缺点:产品族扩展非常困难,严重违反开闭原则

demo:当内蒙古、河北也需要卖水果时。

在这里插入图片描述

public abstract class Fruit {
    protected String name;

    public String getName() {
        return name;
    }
}

public class Apple extends Fruit {

    public Apple(String name) {
        super.name = name;
    }

}
public class Orange extends Fruit {

    public Orange(String name) {
        super.name = name;
    }

}

public interface AbstractFruitFactory {

    Fruit getFruit(String type);

}

public class HbFruitFactory implements AbstractFruitFactory {
    @Override
    public Fruit getFruit(String type) {
        Fruit fruit = null;
        if (type.equals("apple")) {
            fruit = new Apple("河北苹果");
        } else {
            fruit = new Orange("河北橘子");
        }
        return fruit;
    }
}

public class NMFruitFactory implements AbstractFruitFactory {
    @Override
    public Fruit getFruit(String type) {
        Fruit fruit = null;
        if (type.equals("apple")) {
            fruit = new Apple("内蒙苹果");
        } else {
            fruit = new Orange("内蒙橘子");
        }
        return fruit;
    }
}

public class AbsTest {

    public static void main(String[] args) {


        AbstractFruitFactory fruitFactory=new HbFruitFactory();

        Fruit apple = fruitFactory.getFruit("apple");

        System.out.println(apple.getName());


    }

}

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

响彻天堂丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值