标签:解决 cal 问题 工厂模式 定义 abstract windows bre JD
入门级的设计模式之一,也是学习工厂模式的的基础。
需求:假如我们需要去相亲,介绍人跟你说了,我这次给你找了很多个小姑娘,随便挑哦。
听到这句话你就好奇了,哎呦,你好厉害呀,怎么做到的呢,下面我们就来看看介绍人是怎么做到吧。
注:不熟悉UML的同学请参考此文章:几分钟几张图教你学会如何使用UML
来看代码:
public interface SimpleInterface {
public void say();
}
public class TenderGirl implements SimpleInterface{
@Override
public void say() {
System.out.println("人家是一个淡淡的女子。。。");
}
}
public class ToughGirl implements SimpleInterface{
@Override
public void say() {
System.out.println("你瞅啥。。。");
}
}
public class SimpleFactory {
public static SimpleInterface getGirl(String type) throws Exception {
SimpleInterface girl=null;
switch (type) { //注意此处jdk1.8以后才支持此写法
case "温柔":
girl=new TenderGirl();
break;
case "彪悍":
girl=new ToughGirl();
break;
default:
throw new Exception("Not Girl");
}
return girl;
}
}
上方给出了一个简单工厂的简单实现,但是仔细一想,不对呀,那要是再来个例如高冷类型的女孩子怎么办呀,难道我们要去修改getGirl方法么,这样可不符合我们的开闭原则呀。那要不我们就看工厂模式有没有解决这个问题吧
工厂模式与简单工厂的区别就是把原先的工厂类抽象出来了,这个时候每当增加一个女孩的时候我们不需要修改代码,只需要增加一个工厂就够了。来看一下实现吧(注:女孩的接口和实现类请参考上方的简单工厂,这里就不给出了)
public interface AbstractFactory {
public Girl getGirl();
}
public class TenderGirlFactory implements AbstractFactory {
@Override
public Girl getGirl() {
return new TenderGirl();
}
}
public class ToughGirlFactory implements AbstractFactory {
@Override
public Girl getGirl() {
return new ToughGirl();
}
}
抽象工厂的出现目的是为了解决产品族的问题,什么是产品族呢?
举一个离我们最近的例子:我们在开发中使用最多的是什么,电脑。我们有的人电脑是Windows的有的是Linux的当我们开发的时候需要很多的软件,JDK和Tomcat等,不同的系统安装不同格式的软件,这里不同格式的软件就是产品族了。先来看一下类图
这个类图初看可能比较复杂,但是我想它还是很好理解的
那么,你get到了工厂模式了么?
本文出自https://zhixiang.org.cn/#/blog/read/66c32767-117e-4474-9e10-3d0914d1bd82,转载请保留。
标签:解决 cal 问题 工厂模式 定义 abstract windows bre JD
原文地址:https://www.cnblogs.com/zhixiang-org-cn/p/9248997.html