zoukankan      html  css  js  c++  java
  • 设计模式之抽象工厂模式

        抽象工厂模式是在原有的工厂模式中加入产品族的概念。要研究什么是抽象工厂模式就要首先了解什么是产品族。所谓产品族就是是指位于不同产品等级结构中,功能相关联的产品组成的家族。(摘抄自:百度百科)下面我用代码来解释一下什么是产品族。

        首先定义两个产品的接口:

    public interface Cpu {
        public void run();
    }
    
    public interface Keyboard {
       public void input();
    }

    然后我们在定义四个具体的产品类,分别是ChineseCpu和AmericanCpu,ChineseKeyboard和AmericanKeyboard:

    public class ChineseCpu implements Cpu{
        @Override
        public void run() {
            System.out.println("中国的cpu在运行");
        }
    }
    
    public class AmericanCpu implements Cpu{
        @Override
        public void run() {
            System.out.println("美国的cpu在运行");
        }
    }
    
    public class ChineseKeyboard implements Keyboard{
        @Override
        public void input() {
            System.out.println("中国的键盘在输入。。。");
        }
    }
    
    public class AmericanKeyboard implements Keyboard{
        @Override
        public void input() {
            System.out.println("美国的键盘在输入。。。");
        }
    }

    其中中国的cup和中国的键盘就可以看成一个产品族,美国的cpu和美国的键盘可以看成另一个产品族。

        知道了什么是产品族,接下来就要引入我们今天讨论的主题什么是抽象工厂模式。大家还记的工厂模式吗?我们为每一个产品创建了一个属于他们的工厂,那个抽象工厂我们就可以认为是为每一个产品族创建一个工厂。我们就以上面来举例,现在我们已经有了中国cpu,美国cpu,中国键盘和美国键盘。那个我们现在就需要一个工厂来生产这些产品,如果是工厂模式,那么我们至少还需要4个具体的工厂类来生产这些产品,所以这个时候我们可以使用抽象工厂模式来做。代码如下:1.首先我们需要创建一个工厂接口。

    public interface Factory {
       public Cpu makeCpu();
       public Keyboard makeKeyboard();
    }

    2.定义两个实现工厂接口的实现类

    public class ChineseFactory implements Factory{
    
        @Override
        public Cpu makeCpu() {
            return new ChineseCpu();
        }
    
        @Override
        public Keyboard makeKeyboard() {
            return new ChineseKeyboard();
        }
    
    }
    
    public class AmericanFactory implements Factory{
    
        @Override
        public Cpu makeCpu() {
            return new AmericanCpu();
        }
    
        @Override
        public Keyboard makeKeyboard() {
            return new AmericanKeyboard();
        }
    
    }

    3.当用户使用时

     public static void main(String[] args) {
             Factory AmericanFactory = new AmericanFactory();
             Cpu aCpu = AmericanFactory.makeCpu();
             aCpu.run();
             Keyboard aKeyboard = AmericanFactory.makeKeyboard();
             aKeyboard.input();
        }

    我们可以看到每个工厂创建了一个产品族。通过使用抽象工厂模式可以解决具有相同(或者相似)等级结构的多个产品族中的产品对象的创建问题,使代码更加的简洁。

  • 相关阅读:
    css---box-sizing
    float与inline-block的一些应用场景的区别
    一些html元素的最原始状态
    css之深入理解overflow
    css中的锚点
    新增UI样式
    zh-CN、zh-Hans区别
    SourceTree 3.3.6安装跳过注册安装
    Windows sever 由于管理员设置的策略,该磁盘处于脱机状态的解决方法。
    CentOS7.x安装VNC实录
  • 原文地址:https://www.cnblogs.com/suyang-java/p/10329792.html
Copyright © 2011-2022 走看看