• 抽象工厂模式


    抽象工厂(Abstract Factory)

    定义

    抽象工厂模式提供了一个创建一些列相关或者相互依赖对象的接口,无须指向它们具体的类

    适用场景

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

    优点

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

    缺点

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

    代码

    package factory.abstractFactory;
    /**
     * 抽象产品工厂
     */
    public interface IProductFactory {
        //生产手机
        IPhoneProduct producePhone();
        //生产路由器
        IRouterProduct produceRouter();
    }
    
    
    package factory.abstractFactory;
    
    
    //手机产品接口
    public interface IPhoneProduct {
        void Sms();
    }
    
    
    package factory.abstractFactory;
    
    public interface IRouterProduct {
        void start();
    }
    
    
    package factory.abstractFactory;
    
    public class XiaoMiFactory implements IProductFactory{
        @Override
        public IPhoneProduct producePhone() {
            return new XiaoMiPhone();
        }
    
        @Override
        public IRouterProduct produceRouter() {
            return new XiaoMiRouter();
        }
    }
    
    
    package factory.abstractFactory;
    
    public class HuaWeiFactory implements IProductFactory{
        @Override
        public IPhoneProduct producePhone() {
            return new HuaWeiPhone();
        }
    
        @Override
        public IRouterProduct produceRouter() {
            return new HuaWeiRouter();
        }
    }
    
    
    package factory.abstractFactory;
    
    public class XiaoMiPhone implements IPhoneProduct{
    
        @Override
        public void Sms() {
            System.out.println("小米手机发短信");
        }
    }
    
    
    package factory.abstractFactory;
    
    public class XiaoMiRouter implements IRouterProduct{
        @Override
        public void start() {
            System.out.println("小米路由器打开");
        }
    }
    
    
    package factory.abstractFactory;
    
    public class HuaWeiPhone implements IPhoneProduct{
        @Override
        public void Sms() {
            System.out.println("HUAWEI手机发短信");
        }
    }
    
    
    package factory.abstractFactory;
    
    public class HuaWeiRouter implements IRouterProduct{
        @Override
        public void start() {
            System.out.println("HUAWEI路由器打开");
        }
    }
    
    
    package factory.abstractFactory;
    
    public class Customer {
    
        public static void main(String[] args) {
            XiaoMiFactory xiaoMiFactory = new XiaoMiFactory();
            xiaoMiFactory.producePhone().Sms();
    
            xiaoMiFactory.produceRouter().start();
    
    
            HuaWeiFactory huaWeiFactory = new HuaWeiFactory();
            huaWeiFactory.producePhone().Sms();
    
            huaWeiFactory.produceRouter().start();
        }
    }
    
    
  • 相关阅读:
    Git的一些概念(二)
    Git安装(一)
    版本控制工具
    jenkins+maven+svn实现springboot项目的自动化部署过程
    jenkins+maven+svn 持续集成环境搭建
    安装Tomcat
    安装JDK
    JavaEE 项目部署方式
    持续部署、持续集成、持续交付的概念
    Linux下Maven安装(十二)
  • 原文地址:https://www.cnblogs.com/wfszmg/p/13556575.html
Copyright © 2020-2023  润新知