设计模式连环炮-要做规范化产品线的老厂长!
前些天,老浣熊把简单工厂升级成普通工厂,其中一个最大的好处是,让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面霸君
设计模式连环炮-要做规范化产品线的老厂长!相关推荐
- 如何从0到1做一条云计算的新产品线?
http://www.woshipm.com/pmd/659695.html 目前,在本站上的产品经理偏B端的略少一些 ,技术产品就更少了.因此,作为一个入云计算技术产品坑恰好满10个月的校招菜鸟来告 ...
- 精细化运营时代,金融魔镜如何助力各产品线实现业务增长
场景 最近团队准备在部门搞一个产品发布会,本人负责魔镜用户行为分析产品的宣传与推广.对于一枚更习惯于撸代码的程序猿来说,有点小挑战: 1.产品没有完全成型,心理没有十足的底气 . 2.相对业界顶尖同类 ...
- 华为实习传送接入产品线面试经历(已通过二面)
记录下华为传送接入产品线2021/04/29的实习面试 两次面试 第一面技术面 第二面业务主管面 第一面技术面 第一面是技术面,应该是一个和蔼可亲的大佬哈哈,因为我是光学背景,后面做了一些关于计算机方 ...
- 产品线的长度宽度深度_LED照明经销商该如何规划自己的产品线
在LED市场竞争日益惨烈,整体市场疲软的大背景下,LED照明经销商的生意越来越不好做了,要想更好地挣钱.挣大钱,非常不容易.那么在新的市场环境下,LED照明经销商究竟应如何规划自己的产品线? 第一,根 ...
- 雅虎中国弃门户回归搜索 推出新搜索产品线
雅虎中国6年一轮回,新推搜索产品线:音乐.图片.新闻搜索及搜索社区 "雅虎中国将全面转向搜索."昨日,阿里巴巴CEO马云确定了整合计划的第一步."雅巴交易"两个 ...
- 换个视角,从产品线管理看过去
本文由作者 我是仔仔侠 于社区发布 你看着他,他也看着你 这是前段时间拍的小区里的流浪猫,一个窝在车底乘凉,一个在骄阳下嬉戏,偶尔间的一个对视,被不经意间记录下来. 其实,这个和今天想讲的并没有直接关 ...
- 苏宁物流研发中心运输产品线产品总监钟翼翔:IOT技术的应用分析
嘉宾介绍 钟翼翔,现任苏宁物流研发中心运输产品线产品总监. 2011 ~ 2017 期间,担任南京欣网互联网络科技有限公司电商产品部经理.2017 ~ 至今,担任苏宁物流研发中心运输产品线产品总监,主 ...
- 华为swot分析2020_2020华为音频产品汇总分析,完善产品质量,丰富产品线
随着科技的发展,人们的生活方式被不断改善.20世纪以来,智能手机和互联网突飞猛进的发展,极大地便利了人们出行.娱乐.交流沟通等多方面的生活.相应的,智能手机配件产品也在不断进步革新,以满足和适应人们的 ...
- 做为产品经理如何判断一个创业项目是否靠谱?
每年开春,都有不少人计划在新的一年,倒腾点什么"新项目"--有人打算辞去原有的工作去创业:有人打算为自己的公司开拓新的业务:还有人在忙着到处寻找项目去投资- 而一旦涉及一个&quo ...
最新文章
- Redis创建高可用集群教程【Windows环境】
- 基础补充:使用xlrd模块读取excel文件
- thinkphp mysql desc table_数据库表结构_ThinkPHP 数据库表结构处理类(简单实用)-云栖社区-阿里云...
- uiautomator-CTS上运行,出xml报告
- nginx导致的session丢失的解决方法
- PyTorch并行与分布式(二)分布式通信包torch.distributed
- 【JAVA错误笔记】 - Unable add facets project AnnotationWebService CXF 2-x Web Services
- Alibaba Cloud Linux 2 LTS 正式发布,提供更高性能和更多保障!
- iperf详细使用方法
- J2EE视频实战教程网址
- JAVA---线程生命周期及状态转换图
- 大数据平台搭建技术底座 四行业迎来新机遇
- Kubernetes — 监控方案
- css 实现一个尖角_请用CSS实现一个带尖角的正方形
- datagird无法deleteRow
- 小新pro13睡眠后无法唤醒_小新air12、air13、air13pro睡眠后无法唤醒的调试方法
- 囚徒困境(进化优化算法)
- 计算机cct 考试试题,基础计算机cct考试模拟试题.doc
- oracle中怎麼获取绝对值,取绝对值最大的前5个
- pdf预览-pdf.js预览base64格式的数据