• 设计模式之抽象工厂模式


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

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

    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();
        }

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

  • 相关阅读:
    AxWindowsMediaPlayer的详细用法
    C# Windows Media Player控件的常用属性及方法
    C#中winform使用相对路径读取文件的方法
    DataGridView控件在加载数据时产生的闪烁问题
    浅谈C#中的双缓冲
    几种C#实现播放声音的方法
    C#下实现软件欢迎界面
    DataGridView控件内建立日期选择编辑列
    程序员值得看的电影(20170420EDIT)
    员工照片
  • 原文地址:https://www.cnblogs.com/suyang-java/p/10329792.html
Copyright © 2020-2023  润新知