设计模式 抽象工厂模式

基本概念


简单例子

下面我们模拟一个场景 我们要通过抽象工厂模式去创建这4个类,小米手机,小米路由器,华为手机,华为路由器

创建好接口和实体接口

创建手机类接口

package abstractfactory;
//手机产品接口
public interface IphoneProduct {
    //模拟一些功能
    void start();
    void shutdown();
    void callup();
    void sendSMS();
}

创建小米手机和华为手机实体类

package abstractfactory;

public class XiaomiPhone 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 abstractfactory;

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("华为手机发短信");
    }
}

路由器也同理

public interface IRouterProduct {
    void start();
    void shutdown();
    void openwife();
    void setting();
}
public class XiaomiRouter implements IRouterProduct{
    @Override
    public void start() {
        System.out.println("小米路由器开机");
    }

    @Override
    public void shutdown() {
        System.out.println("小米路由器关机");
    }

    @Override
    public void openwife() {
        System.out.println("小米路由器开启wife");
    }

    @Override
    public void setting() {
        System.out.println("小米路由器设置");
    }
}
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("华为路由器开启wife");
    }

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

引入抽象产品接口

在抽象产品接口中只给了两个生成的接口 它并不关心如何具体实现

//抽象产品工厂
public interface IProductFactory {
    //生产手机
    IphoneProduct iphoneProduct();
    //生成路由器
    IRouterProduct irouterProduct();
}

定义具体的工厂类

定义小米工厂类 生成小米系列产品

public class XiaomiFactory implements IProductFactory {
    @Override
    public IphoneProduct iphoneProduct() {
        return new XiaomiPhone();
    }

    @Override
    public IRouterProduct irouterProduct() {
        return new XiaomiRouter();
    }
}

华为同理

public class HuaweiFactory implements IProductFactory {
    @Override
    public IphoneProduct iphoneProduct() {
        return new HuaweiPhone();
    }

    @Override
    public IRouterProduct irouterProduct() {
        return new HuaweiRouter();
    }
}

测试使用

写好具体的工厂类我们就可以使用了
比如生成小米系列产品

package abstractfactory;

public class Client {
    public static void main(String[] args) {
        //小米工厂
        XiaomiFactory xiaomiFactory=new XiaomiFactory();
        IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();
        iphoneProduct.start();
        iphoneProduct.sendSMS();
        iphoneProduct.shutdown();

        IRouterProduct iRouterProduct = xiaomiFactory.irouterProduct();
        iRouterProduct.start();
        iRouterProduct.openwife();
        iRouterProduct.shutdown();
    }
}


一句话总结 抽象工厂定义了下级工厂能干什么 下级完成了具体实现的逻辑

posted @ 2021-09-17 15:38  一个经常掉线的人  阅读(47)  评论(0)    收藏  举报