简单工厂模式
简单工厂模式是属于创建型模式,是工厂模式的一种,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
定义一个创建对象的类,由这个类来封装实例化对象的行为;
方法工厂模式
和简单工厂模式结构一样,不同点在与工厂类为多个方法,每个方法代表创建不同的类。
应用代码如果要创建对象,直接使用该工厂类,调用对应的方法创建对应的对象出来即可。
抽象工厂模式
是一个超级工厂模式,简单的理解为创建工厂的工厂模式。
抽象工厂模式包含了方法工厂模式的思想,所以下面代码就采用抽象工厂模式作为笔记。刚开始我理解抽象工厂模式是在B站狂神的视频,有一幅图:
所以根据这幅图,我们可以写下代码如下:
根据图首先我们建立两个产品的接口,手机和路由器
/**
* 手机产品
*/
public interface Iphone {
public void kaiji();
public void guanji();
public void dadianh();
public void faduanx();
}
/**
* 路由器
*/
public interface Router {
public void kaiji();
public void guanji();
public void lianwang();
public void shezhi();
}
我们建立这两个产品以后,现在需要建立他们的实现厂商,现在有两家公司实现,小米和华为。
先是华为厂商开始制造手机和路由器
public class HuaweiIphone implements Iphone {
@Override
public void kaiji() {
System.out.println("华为手机开机。");
}
@Override
public void guanji() {
System.out.println("华为手机关机。");
}
@Override
public void dadianh() {
System.out.println("华为手机打电话。");
}
@Override
public void faduanx() {
System.out.println("华为手机打发短信。");
}
}
public class HuaweiRouter implements Router {
@Override
public void kaiji() {
System.out.println("华为路由器开机。");
}
@Override
public void guanji() {
System.out.println("华为路由器关机。");
}
@Override
public void lianwang() {
System.out.println("华为路由器联网。");
}
@Override
public void shezhi() {
System.out.println("华为路由器设置信息。");
}
}
小米厂商看到也挺赚钱它也开始制造手机和路由器
public class XiaomiIphone implements Iphone{
@Override
public void kaiji() {
System.out.println("小米手机开机。");
}
@Override
public void guanji() {
System.out.println("小米手机关机。");
}
@Override
public void dadianh() {
System.out.println("小米手机打电话。");
}
@Override
public void faduanx() {
System.out.println("小米手机打发短信。");
}
}
public class XiaomiRouter implements Router {
@Override
public void kaiji() {
System.out.println("小米路由器开机。");
}
@Override
public void guanji() {
System.out.println("小米路由器关机。");
}
@Override
public void lianwang() {
System.out.println("小米路由器联网。");
}
@Override
public void shezhi() {
System.out.println("小米路由器设置信息。");
}
}
现在生产商已经准备就绪了,我们需要还没有建立工厂了。我现在知道的是需要建立两个工厂
那么代码如下:
/**
* 抽象工厂类
*/
public abstract class AbstractFactery {
public abstract Iphone getIphone();
public abstract Router getRouter();
}
从代码顺序我们知道。是华为先建的工厂,华为建立工厂主要 是生成手机和路由器,所以有两个方法的流水线
/**
* 华为工厂
*/
public class HuaweiFactery extends AbstractFactery {
@Override
public Iphone getIphone() {
return new HuaweiIphone();
}
@Override
public Router getRouter() {
return new HuaweiRouter();
}
}
从代码顺序我们知道。小米在华为后面立刻建立了工厂,小米工厂也是生成手机和路由器,所以也有两个方法的流水线
/**
* 小米工厂
*/
public class XiaomiFactery extends AbstractFactery {
@Override
public Iphone getIphone() {
return new XiaomiIphone();
}
@Override
public Router getRouter() {
return new XiaomiRouter();
}
}
从上面代码我已经实现了抽象工厂的设计模式:我们打开类图就大概能看懂流程了。如下:
如果我们需要使用工厂里面的对象实例:
总结
抽象工厂模式,个人感觉过于设计,常规的业务逻辑一般简单工厂模式设计足以,业务是不断增加的,达到一定量级才会考虑到抽象工厂模式。
这时候又是需要推翻重构代码的时候了。在设计之初我们不可能就想到一个业务要设计如此庞大。在项目中所以我们很少用到。