zoukankan      html  css  js  c++  java
  • java23种设计模式(二)抽象工厂模式

    我们接着上一章的工厂方法模式继续学习一下抽象工厂模式。
    抽象工厂模式:在工厂模式中,如果有多个产品,则就是抽象工厂模式。
    例子:
    有一个工厂开了两个子公司,专门用来生产电脑配件键盘和鼠标,一个是联想工厂则生产联想的产品,另一个是宏碁工厂则生产宏碁的产品。
    代码如下:
    1、工厂接口(可以生产鼠标和键盘)

    public interface Factory {
    	 // 生产鼠标
        Mouse createMouse();
    
    	// 生产键盘
        KeyBoard createKeyBoard();
    }
    

    2、联想工厂(生产联想鼠标和键盘)

    public class LenovoFactory implements Factory {
        @Override
        public Mouse createMouse() {
            return new LenovoMouse();
        }
    
        @Override
        public KeyBoard createKeyBoard() {
            return new LenovoKeyBoard();
        }
    }
    

    3、宏碁工厂(生产宏碁鼠标和键盘)

    public class AcerFactory implements Factory {
        @Override
        public Mouse createMouse() {
            return new AcerMouse();
        }
    
        @Override
        public KeyBoard createKeyBoard() {
            return new AcerKeyBoard();
        }
    }
    

    4、键盘接口

    public interface KeyBoard {
    
        void getName();
    }
    

    5、联想键盘实现类

    public class LenovoKeyBoard implements KeyBoard {
        @Override
        public void getName() {
            System.out.println("这个是联想键盘");
        }
    }
    

    6、宏碁键盘实现类

    public class AcerKeyBoard implements KeyBoard {
        @Override
        public void getName() {
            System.out.println("这个是宏碁键盘");
        }
    }
    

    7、鼠标接口

    public interface Mouse {
    
        void getName();
    }
    

    8、联想鼠标接口

    public class LenovoMouse implements Mouse {
        @Override
        public void getName() {
            System.out.println("这个是联想鼠标");
        }
    }
    

    9、宏碁鼠标接口

    public class AcerMouse implements Mouse {
        @Override
        public void getName() {
            System.out.println("这个是宏碁鼠标");
        }
    }
    

    10、客户端(可以在联想工厂买联想鼠标和键盘,也可以在宏碁工厂买宏碁生产的鼠标和键盘)

    @SpringBootTest
    class FactoryApplicationTests {
        @Test
        void abstractF(){
    
            LenovoFactory lenovoFactory = new LenovoFactory();
            lenovoFactory.createKeyBoard().getName();
            lenovoFactory.createMouse().getName();
    
            AcerFactory acerFactory = new AcerFactory();
            acerFactory.createKeyBoard().getName();
            acerFactory.createMouse().getName();
        }
    }
    

    总结:
    (1)增加xx工厂:创建xx工厂,继承工厂接口,然后创建xx鼠标继承鼠标接口,创建xx键盘继承键盘接口即可。
    (2)增加音响产品:首先创建音响接口,然后分别创建联想音响和宏碁音响实现类实现音响接口。然后再工厂接口中增加创建音响的方法,在联想工厂和宏碁工厂分别实现自家音响的创建。

    如果文章对您有帮助,请记得点赞关注哟~
    欢迎大家关注我的公众号<情系IT>,每日技术推送文章供大家学习参考。

  • 相关阅读:
    centos7 yum 安装mariadb
    curl 获取外网IP
    ansible之一:安装与配置
    第一步 django的下载安装
    命名空间的三种引用方式:非限定名称、限定名称、完全限定名称
    重温PHP之快速排序
    PHP实现文件下载的核心代码
    PHP常量定义之define与const对比
    ThinkPHP中I('post.')与create()方法的对比
    重温PHP之选择排序
  • 原文地址:https://www.cnblogs.com/zhixie/p/11711441.html
Copyright © 2011-2022 走看看