设计模式笔记(工厂模式)

简单工厂模式

简单工厂模式是属于创建型模式,是工厂模式的一种,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

定义一个创建对象的类,由这个类来封装实例化对象的行为;

方法工厂模式

和简单工厂模式结构一样,不同点在与工厂类为多个方法,每个方法代表创建不同的类。

应用代码如果要创建对象,直接使用该工厂类,调用对应的方法创建对应的对象出来即可。

抽象工厂模式

是一个超级工厂模式,简单的理解为创建工厂的工厂模式。

抽象工厂模式包含了方法工厂模式的思想,所以下面代码就采用抽象工厂模式作为笔记。刚开始我理解抽象工厂模式是在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();
    }
}

从上面代码我已经实现了抽象工厂的设计模式:我们打开类图就大概能看懂流程了。如下:

如果我们需要使用工厂里面的对象实例:

总结

抽象工厂模式,个人感觉过于设计,常规的业务逻辑一般简单工厂模式设计足以,业务是不断增加的,达到一定量级才会考虑到抽象工厂模式。

这时候又是需要推翻重构代码的时候了。在设计之初我们不可能就想到一个业务要设计如此庞大。在项目中所以我们很少用到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值