老板派给李四的新任务-分土豆(抽象工厂)-设计模式篇


情景描述

继上次的西红柿业务老板赚大发了之后,这次又给李四分发了一个新的任务,让他接手土豆分配,由于土豆大小不同,价格也不同,李四此时想,经过上次的任务之后,不可能每次任务都重新建设一个新的工厂,那成本未免也太高了吧,那肯定不行。
这时李四突然想到,为啥不直接建一个抽象工厂呢,到时候有任务就可以直接进行分配,无非就是分车间或生产线而已。


一、明确土豆大小

/**
 * 抽象土豆
 * @author Penglei
 * @date  2020/12/26
 * @version 1.0.0
 * @updateVersion 1.0.0
 */
public interface Patato {
    /*土豆信息*/
    void tInfo();
}


/**
 * 大土豆
 * @author Penglei(红蜘蛛)
 * @date  2020/12/26
 * @version 1.0.0
 * @updateVersion 1.0.0
 */
public class BigPotato implements Patato {
    @Override
    public void tInfo() {
        System.out.println("我值5块一斤");
    }
}


public class InPotato implements Patato {
    @Override
    public void tInfo() {
        System.out.println("我值3块一斤");
    }
}

二、确定抽象工厂

public interface IFactory<T> {
    /*分类*/
    Object sorting(Class<T> t) throws ClassNotFoundException
    ,IllegalAccessException
    ,InstantiationException;
}


/**
 * 工厂实现
 * @author Penglei(红蜘蛛)
 * @date  2020/12/27
 * @version 1.0.0
 * @updateVersion 1.0.0
 */
public class PotatoFactory implements IFactory<Patato>{

    @Override
    public Object sorting(Class t) throws ClassNotFoundException
    ,IllegalAccessException
    ,InstantiationException {
        return (Patato) Class.forName(t.getName()).newInstance();
    }
}

开始生产

public class Client {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        IFactory factory = new PotatoFactory();
        Patato p = (Patato) factory.sorting(BigPotato.class);
        p.tInfo();
    }
}

public class Client {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        IFactory factory = new PotatoFactory();
        Patato p = (Patato) factory.sorting(InPotato.class);
        p.tInfo();
    }
}

在这里插入图片描述

在这里插入图片描述

开始新生产线

public class BigTomato implements Tomato {
    @Override
    public void tInfo() {
        System.out.println("颜色比较红");
    }
}


public class InTomato implements Tomato {
    @Override
    public void tInfo() {
        System.out.println("颜色比较浅");
    }
}

public class SmallTomato implements Tomato {
    @Override
    public void tInfo() {
        System.out.println("还没成熟");
    }
}



public class Client {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        /*土豆大小*/
        IFactory factory = new PotatoFactory();
        Patato p = (Patato) factory.sorting(InPotato.class);
        p.tInfo();
        System.out.println("---------------------------------------");
        /*挑拣西红柿颜色*/
        factory = new TomatoFactory1();
        Tomato tomato = (Tomato) factory.sorting(BigTomato.class);
        tomato.tInfo();
    }
}

在这里插入图片描述

说明:
抽象工厂模式通常适的场景:
当需要创建的对象是一系列相互关联或相互依赖的产品族时,如蔬菜工厂中的土豆,西红柿,花椰菜等。
系统中有多个产品族,但每次只使用其中的某一族产品。如有人只喜欢穿某一个品牌的衣服和鞋。
系统中提供了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构。

如果产品族中只有一类产品,则不需要用到抽象工厂,只需要使用简单工厂或工厂方法模式

结尾

李四考虑充分完善,给老板节省了一大笔建设费用,老板送给了李四一辆奥迪。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

红蜘蛛K

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

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

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

打赏作者

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

抵扣说明:

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

余额充值