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

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

  • 相关阅读:
    bzoj2428 [HAOI2006]均分数据 模拟退火
    Jersey入门三:创建一个JavaEE的Web项目
    Jersey入门二:运行项目
    Jersey入门一:从Maven Archetype创建jersey项目
    Bootstrap进阶七:LESS语法详解
    Bootstrap进阶六:动态样式语言LESS简介
    Bootstrap进阶五:Web开发中很实用的交互效果积累
    Bootstrap进阶四:jQuery插件详解
    Bootstrap进阶三:jQuery插件概览
    Bootstrap进阶二:基本组件
  • 原文地址:https://www.cnblogs.com/suyang-java/p/10329792.html
Copyright © 2011-2022 走看看