怀旧网,博客详情:设计模式--抽象工厂模式

1、设计模式介绍

2、设计模式--单例模式

3、设计模式--工厂模式

4、设计模式--抽象工厂模式

5、设计模式--建造者模式

6、设计模式--原型模式

7、设计模式--适配器模式

8、设计模式--桥接模式

9、设计模式--代理模式

原创

设计模式--抽象工厂模式

抽象工厂模式介绍

定义:

  • 抽象工厂模式,提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们具体的类

应用场景:

  • 客户端不依赖于实例如何被创建、实现等细节
  • 强调一系列相关的产品对象(属于同一产品族)一起使用,创建对象需要大量的重复代码
  • 提供一个产品类的库,所有的产品以同样的接口出现,使客户端不依赖于具体实现

优点:

  • 具体产品在应用层的代码隔离,无需关心创建细节
  • 将一个系列的产品,统一到一起创建

缺点:

  • 规定了所有可能被创建的产品集合,产品族中扩展新的产品困难
  • 增加了系统的抽象性和理解难度

image-20240604103006161

image-20240604103953543

抽象工厂模式案例

/**
 * 接口中修饰符:
 *  Java 7 方法只能为抽象方法,默认为 public abstract
 *  Java 8 增加:默认方法default;静态方法static(默认方法不强制重写,静态方法不会被实现类继承)
 *  Java 9 增加:私有方法
 *
 *  接口中不可以定义变量即只能定义常量,属性默认是public static final,且必须赋值
 */
// 1.------------ 超级工厂,定义产品族 ------------ 
public interface IProductFactory {
    //生产手机
    IPhoneProduct phoneProduct();
    //生产路由器
    IRouterProduct routerProduct();
}
// 2.------------ 产品接口,定义产品功能 ------------ 
//手机产品接口
public interface IPhoneProduct {
    void open();    //开机
    void callup();  //打电话
}
//路由器产品接口
public interface IRouterProduct {
    void open();    //开机
    void openWifi();  //打开WiFi
}
// 3.------------ 具体产品,实现产品接口 ------------ 
//小米手机
public class XiaomiPhone implements IPhoneProduct {
    @Override
    public void open() {
        System.out.println("小米手机:开机");
    }
    @Override
    public void callup() {
        System.out.println("小米手机:打电话");
    }
}
//小米路由器
public class XiaomiRouter implements IRouterProduct {
    @Override
    public void open() {
        System.out.println("小米路由器:开机");
    }
    @Override
    public void openWifi() {
        System.out.println("小米路由器:打开WiFi");
    }
}
//华为手机
public class HuaweiPhone implements IPhoneProduct {
    @Override
    public void open() {
        System.out.println("华为手机:开机");
    }
    @Override
    public void callup() {
        System.out.println("华为手机:打电话");
    }
}
//华为路由器
public class HuaweiRouter implements IRouterProduct {
    @Override
    public void open() {
        System.out.println("华为路由器:开机");
    }
    @Override
    public void openWifi() {
        System.out.println("华为路由器:打开WiFi");
    }
}
// 4.------------ 超级工厂实现类,生产具体产品 ------------ 
//小米工厂,生产小米手机、路由器
public class XiaomiFactory implements IProductFactory{
    @Override
    public IPhoneProduct phoneProduct() {
        return new XiaomiPhone();
    }
    @Override
    public IRouterProduct routerProduct() {
        return new XiaomiRouter();
    }
}
//华为工厂,生产华为手机、路由器
public class HuaweiFactory implements IProductFactory{
    @Override
    public IPhoneProduct phoneProduct() {
        return new HuaweiPhone();
    }
    @Override
    public IRouterProduct routerProduct() {
        return new HuaweiRouter();
    }
}
// 5.------------ 消费者,实现具体消费 ------------ 
public class Consumer {
    public static void main(String[] args) {
        System.out.println("------------小米产品---------------");
        XiaomiFactory xiaomiFactory = new XiaomiFactory();      //小米工厂
        IPhoneProduct xiaomiPhone = xiaomiFactory.phoneProduct();   //生产小米手机
        IRouterProduct xiaomiRouter = xiaomiFactory.routerProduct();//生产小米路由器
        System.out.println("------------华为产品---------------");
        HuaweiFactory huaweiFactory = new HuaweiFactory();      //华为工厂
        IPhoneProduct huaweiPhone = huaweiFactory.phoneProduct();   //华为手机
        IRouterProduct huaweiRouter = huaweiFactory.routerProduct();//华为路由器
    }
}

image-20240604104316829

  1. 超级工厂接口,只起到一个限制作用,限制产品族
  2. 具体工厂,实现超级工厂接口,生产不同规格的产品
  • 平台作者:怀旧(联系作者)
  • QQ:444915368
  • 邮箱:444915368@qq.com
  • 电话:17623747368
  • 评论

    登录后才可以进行评论哦!

    回到顶部 留言