工厂模式本质、作用 三种模式的简单示例

工厂模式
核心本质:
*实例化对象不使用new,用工厂方法代替
*将选择实现了,创建对象统一管理和控制,从而将调用者和为你们的实现类解耦
作用:
*实现了床建者和调用者分离
详细分类:
工厂模式本质、作用 三种模式的简单示例

需要用到oop七大原则中的

工厂模式本质、作用 三种模式的简单示例

1、简单工厂模式 -例子

工厂模式本质、作用 三种模式的简单示例

Car接口–车 WuLing(五菱)和Tesla(特斯拉)继承Car
创建了一个车工厂Car Factory代码如下
工厂模式本质、作用 三种模式的简单示例

在Consumer消费者中代码如下
工厂模式本质、作用 三种模式的简单示例

简单工厂函数通过车工厂类去传递参数选择创建对象
缺点:如果我再添加一辆车就需要去工厂类里面去改代码,如此一来就违背了开闭原则—
所以需要工厂方法模式来解决这个问题

2、工厂方法模式 -例子

项目中如下
工厂模式本质、作用 三种模式的简单示例

又给每个车的都创建了Factory,在每种车类的工厂里面去new实体的车,代码如下
工厂模式本质、作用 三种模式的简单示例


CarFactory工厂为接口-代码如下
工厂模式本质、作用 三种模式的简单示例

消费者去消费的时候就只需要选择new一个工厂的类,比如五菱的factory工厂,调用getCar();
工厂模式本质、作用 三种模式的简单示例

总而言之就是实现了代码的解耦,

3、抽象工厂模式
工厂模式本质、作用 三种模式的简单示例

类图如下
工厂模式本质、作用 三种模式的简单示例

Client客户类用来测试
Factory为工厂
Huawei工厂
Huawei手机、路由器类
iphonePrduct为手机产品的接口
IproducFatory为抽象生产工厂,测试类只需要调用工厂
IRouterProduct为路由器产品接口小米工厂小米手机、路由器类

代码如下图
华为手机
package factory.abstractTest;

/**

  • 华为手机
    */
    public class HuaweiPhone implements IphoneProduct{
    @Override
    public void start() {
    System.out.println(“开启华为手机”);
    }

@Override
public void shutdown() {
System.out.println(“关闭华为手机”);
}

@Override
public void callup() {
System.out.println(“华为手机打电话”);
}

@Override
public void sendSMS() {
System.out.println(“华为手机发短信”);
}
}

华为路由器
package factory.abstractTest;

public class HuaweiRouter implements IRouterProduct{
@Override
public void start() {
System.out.println(“启动华为路由器”);
}

@Override
public void shutdown() {
System.out.println(“关闭华为路由器”);
}

@Override
public void openWife() {
System.out.println(“打开华为wifi”);
}

@Override
public void settiong() {
System.out.println(“华为路由器设置”);
}
}

华为工厂
public class HuaweiFactory implements IProductFactory{
@Override
public IphoneProduct iphonePorduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct routerproduct() {
return new HuaweiRouter();
}
}

小米的和华为的一样编写应该路由器和手机类继承产品的接口

手机产品与路由器产品的接口
/**

  • 手机产品接口
    */
    public interface IphoneProduct {
    void start();
    void shutdown();
    void callup();
    void sendSMS();
    }

/**

  • 路由器接口
    */
    public interface IRouterProduct {
    void start();
    void shutdown();
    void openWife();
    void settiong();
    }

抽象产品的工厂
/**

  • 抽象产品工厂
    */
    public interface IProductFactory {
    //生产手机
    IphoneProduct iphonePorduct();
    //生产路由器
    IRouterProduct routerproduct();
    }

测试一下
public class Client {
public static void main(String[] args) {
System.out.println("=小米系列产品=============");
//小米工厂
XiaoMiFactory xiaoMiFactory=new XiaoMiFactory();
IphoneProduct iphoneProduct=xiaoMiFactory.iphonePorduct();
iphoneProduct.callup();
iphoneProduct.sendSMS();

IRouterProduct iRouterProduct=xiaoMiFactory.routerproduct();
iRouterProduct.openWife();

System.out.println("=华为系列产品=============");
//小米工厂
HuaweiFactory HuaweiFactory=new HuaweiFactory();
IphoneProduct iphoneProduct1 = HuaweiFactory.iphonePorduct();
iphoneProduct1.callup();
iphoneProduct1.sendSMS();

IRouterProduct iRouterProduct1=HuaweiFactory.routerproduct();
iRouterProduct1.openWife();
}
}
自我理解:
只需要去创建品牌的工厂,以品牌的工厂去调用抽象的产品工厂里的方法去选择生成手机还是路由器,而品牌的工厂里面去创建了类的实例返回方法是手机产品与路由器产品的接口,再去使用其方法,应该是做到了后续代码跟新添加品牌就再加一个品牌类以及要制造的产品类,要是要再制作一个产品比如电脑,那就再加入一个电脑的接口,再编写华为或者小米的电脑类去实现
就相当于添加了一个中间层–赋上类图如下

小结:
工厂模式本质、作用 三种模式的简单示例
在B站上学习到的及时分析一下心得,老师说的小结抽象工厂不可以增加产品,但是增加产品也就是再增加一个接口就好了,可能是我没理解透彻,希望大佬们指导一下