前些天,老浣熊把简单工厂升级成普通工厂,其中一个最大的好处是,让dead stay dead,后面就尽量不要去改动原来老旧的逻辑,避免手抖又改错了,而且新老逻辑因为被分开 也更容易理解(想想swtich里的一堆case 和 从接口实现出来的逻辑)。

尝到抽象甜头的老浣熊,正好又遇到了一个新的情况:不同国家地区的猫狗的种类差别是挺大的,但老浣熊造的神兽只会喵喵喵汪汪汪,造型品种上没有做区别,让人审美疲劳并缺少惊喜感,喜新厌旧下,人流量有稳步下降的趋势(听听,像不像渣男不爱的说辞)

为此,老浣熊又去做了波调研:既然在中国先开的神兽动物园,那就先紧着中国人的喜好来吧。中国国内有种动物遍布整个大陆:土狗+土猫。又称中华田园犬和中华田园猫

中华田园都是蠢蠢的感觉哎。再看看外地的斑点狗斑点猫

看着这两种风格迥异,习性差别大的猫狗,同一个AnimalFactory已经不合适作为两个品种的设定了。那如何拆分呢?如果后面中华和斑点两个品种分叉出来更多相互不兼容的特性,基于同一个AnimalFactory如何做定义呢?

"也许,他们注定命中不能在一起。"老浣熊想起了老套的言情剧套路,自我脑补之后,决定将他们拆开。

首先,AnimalFactory就要变更套路

public interface AnimalFactory {    public IDog produceDog();    public ICat produceCat();}--------------------------------------------------------------------public interface ICat {    void sayYourBreed();}--------------------------------------------------------------------public interface IDog {    void sayYourBreed();}

以上可以看出,AnimalFactory 此时针对的是抽象接口,此时它对后面会有多少种类的猫猫狗狗一无所知。

接下来,就是创建中华田园系列工厂和斑点系列工厂 以及 对应品种的猫猫狗狗

public class ChineseCat implements ICat {    @Override    public void sayYourBreed() {        System.out.println("I am 土猫");    }}public class ChineseDog implements IDog {    @Override    public void sayYourBreed() {        System.out.println("I am 土狗");    }}--------------------------------------------------------------------public class SpotCat implements ICat {    @Override    public void sayYourBreed() {        System.out.println("I am 斑点猫");    }}public class SpotDog implements IDog {    @Override    public void sayYourBreed() {        System.out.println("I am 斑点狗");    }}--------------------------------------------------------------------/** * 中华田园系列工厂 */public class ChineseFactory implements AnimalFactory {    @Override    public IDog produceDog() {        return new ChineseDog();    }    @Override    public ICat produceCat() {        return new ChineseCat();    }}--------------------------------------------------------------------/** * 斑点系列 */public class SpotFactory implements AnimalFactory {    @Override    public IDog produceDog() {        return new SpotDog();    }    @Override    public ICat produceCat() {        return new SpotCat();    }}

一通操作之后,老浣熊发现,原本只针对神兽的工厂,变成了以物种+种类做维度的工厂。这不就和 格力有电视 空调 洗衣机,海尔也有电视 空调 洗衣机,而这些种类下面都有对应的产品线做统一生产加工管理嘛。

"没想到,我已经走上了产品线的规范道路了,看来又离世界五百强又进步了一丢丢,真烦恼啊~~"


话虽如此,如果这时要加个中华田园鸟,你会发现要加IBird、ChineseBird、SpotBird这几个类,然后改动对应工厂,在其中添加对应的方法;如果多了个长毛工厂,又要在长毛工厂里实现对应创建猫狗鸟的方法。

这么做既没有让逝者安息,新增物种和种类又是事情多多。

那有没有什么方式可以减少这部分工作量呢?

Java面霸君

设计模式连环炮-要做规范化产品线的老厂长!相关推荐

  1. 如何从0到1做一条云计算的新产品线?

    http://www.woshipm.com/pmd/659695.html 目前,在本站上的产品经理偏B端的略少一些 ,技术产品就更少了.因此,作为一个入云计算技术产品坑恰好满10个月的校招菜鸟来告 ...

  2. 精细化运营时代,金融魔镜如何助力各产品线实现业务增长

    场景 最近团队准备在部门搞一个产品发布会,本人负责魔镜用户行为分析产品的宣传与推广.对于一枚更习惯于撸代码的程序猿来说,有点小挑战: 1.产品没有完全成型,心理没有十足的底气 . 2.相对业界顶尖同类 ...

  3. 华为实习传送接入产品线面试经历(已通过二面)

    记录下华为传送接入产品线2021/04/29的实习面试 两次面试 第一面技术面 第二面业务主管面 第一面技术面 第一面是技术面,应该是一个和蔼可亲的大佬哈哈,因为我是光学背景,后面做了一些关于计算机方 ...

  4. 产品线的长度宽度深度_LED照明经销商该如何规划自己的产品线

    在LED市场竞争日益惨烈,整体市场疲软的大背景下,LED照明经销商的生意越来越不好做了,要想更好地挣钱.挣大钱,非常不容易.那么在新的市场环境下,LED照明经销商究竟应如何规划自己的产品线? 第一,根 ...

  5. 雅虎中国弃门户回归搜索 推出新搜索产品线

    雅虎中国6年一轮回,新推搜索产品线:音乐.图片.新闻搜索及搜索社区 "雅虎中国将全面转向搜索."昨日,阿里巴巴CEO马云确定了整合计划的第一步."雅巴交易"两个 ...

  6. 换个视角,从产品线管理看过去

    本文由作者 我是仔仔侠 于社区发布 你看着他,他也看着你 这是前段时间拍的小区里的流浪猫,一个窝在车底乘凉,一个在骄阳下嬉戏,偶尔间的一个对视,被不经意间记录下来. 其实,这个和今天想讲的并没有直接关 ...

  7. 苏宁物流研发中心运输产品线产品总监钟翼翔:IOT技术的应用分析

    嘉宾介绍 钟翼翔,现任苏宁物流研发中心运输产品线产品总监. 2011 ~ 2017 期间,担任南京欣网互联网络科技有限公司电商产品部经理.2017 ~ 至今,担任苏宁物流研发中心运输产品线产品总监,主 ...

  8. 华为swot分析2020_2020华为音频产品汇总分析,完善产品质量,丰富产品线

    随着科技的发展,人们的生活方式被不断改善.20世纪以来,智能手机和互联网突飞猛进的发展,极大地便利了人们出行.娱乐.交流沟通等多方面的生活.相应的,智能手机配件产品也在不断进步革新,以满足和适应人们的 ...

  9. 做为产品经理如何判断一个创业项目是否靠谱?

    每年开春,都有不少人计划在新的一年,倒腾点什么"新项目"--有人打算辞去原有的工作去创业:有人打算为自己的公司开拓新的业务:还有人在忙着到处寻找项目去投资- 而一旦涉及一个&quo ...

最新文章

  1. Redis创建高可用集群教程【Windows环境】
  2. 基础补充:使用xlrd模块读取excel文件
  3. thinkphp mysql desc table_数据库表结构_ThinkPHP 数据库表结构处理类(简单实用)-云栖社区-阿里云...
  4. uiautomator-CTS上运行,出xml报告
  5. nginx导致的session丢失的解决方法
  6. PyTorch并行与分布式(二)分布式通信包torch.distributed
  7. 【JAVA错误笔记】 - Unable add facets project AnnotationWebService CXF 2-x Web Services
  8. Alibaba Cloud Linux 2 LTS 正式发布,提供更高性能和更多保障!
  9. iperf详细使用方法
  10. J2EE视频实战教程网址
  11. JAVA---线程生命周期及状态转换图
  12. 大数据平台搭建技术底座 四行业迎来新机遇
  13. Kubernetes — 监控方案
  14. css 实现一个尖角_请用CSS实现一个带尖角的正方形
  15. datagird无法deleteRow
  16. 小新pro13睡眠后无法唤醒_小新air12、air13、air13pro睡眠后无法唤醒的调试方法
  17. 囚徒困境(进化优化算法)
  18. 计算机cct 考试试题,基础计算机cct考试模拟试题.doc
  19. oracle中怎麼获取绝对值,取绝对值最大的前5个
  20. pdf预览-pdf.js预览base64格式的数据

热门文章

  1. txt文件英语单词词频统计
  2. jzoj. 4298. 【NOIP2015模拟11.2晚】我的天
  3. mysql5.7小版本升级-windows
  4. coreldraw基本工具(2)
  5. Xcode cannot launch because the device is locked.
  6. RLC交流电路测量实验
  7. One-Error多标签分类_多分类及多标签分类算法
  8. 多租户数据隔离的三种方案
  9. 漫威电影宇宙的正确观影顺序
  10. 这个AR/VR设计原型利器,爆赞