设计模式之抽象工厂模式

一、概述

1、定义
  • 为创建一组相关或者是相互依赖的对象提供一个借口,而不需要指定它们的具体类
2、起源
  • 起源于以前对不同操作系统的图形化解决方案
    • eg:不同操作系统中的按钮与文本框的实现不同
3、使用场景
  • 一个对象族有相同的约束时,可以使用抽象工厂模式
  • 有两种产品层级关系时
    • 生产一级产品的工厂
    • 二级产品对不同的一级产品有不同的具体产品
4、UML类图

  • (1)AbstractFactory:抽象工厂
    • 声明了一组用于创建一种产品的方法,每一个方法对应一种产品
  • (2)ConcreteFactory:具体工厂
    • 实现了在抽象工厂中定义的创建产品的方法
  • (3)AbstractFactory:抽象产品
    • 为每种产品声明接口
  • (4)ConcreteProduct:具体产品
    • 定义具体工厂生产的具体产品对象,实现抽象产品接口中生命的业务方法
5、优缺点
  • 优点:
    • 分离接口与实现,客户端使用抽象工厂来创建需要的对象,使其从具体的产品实现中解耦
  • 缺点:
    • 类文件的爆炸性增加
    • 不太容易扩展新的产品类

二、实现

1、抽象工厂:
    public abstract class CarFactory {
        //生产轮胎
        public abstract ITire createTire();
        
        //生产发动机
        public abstract IEngine createEngine();
        
        //生产制动系统
        public abstract IBrake createBrake();
        
    }
2、抽象产品及具体产品:
  • 轮胎
        public interface ITire {
            void tire();
        }
        
        public class NormalTire implements ITire {
            @Override
            public void tire() {
                System.out.println("普通轮胎");
            }
        }
        
        public class SUVTire implements ITire {
            @Override
            public void tire() {
                System.out.println("越野轮胎");
            }
        }
    
  • 发动机
        public interface IEngine {
            void engine();
        }
        
        public class DomesticEngin implements IEngine {
            @Override
            public void engine() {
                System.out.println("国产发动机");
            }
        }
        
        public class ImportEngine implements IEngine {
            @Override
            public void engine() {
                System.out.println("进口发动机");
            }
        }
    
  • 制动系统
        public interface IBrake {
            void brake();
        }
        
        public class NormalTire implements IBrake {
            @Override
            public void brake() {
                System.out.println("普通制动");
            }
        }
        
        public class SeniorBrake implements IBrake {
            @Override
            public void brake() {
                System.out.println("高级制动");
            }
        }
    
3、具体工厂:
  • Audi Q3 工厂类
        public class Q3Factory extends CarFactory {
            @Override
            public ITire createTire() {
                return new NormalTire();
            }
            
            @Override
            public IEngine createEngine() {
                return new DomesticEngine();
            }
            
            @Override
            public IBrake createBrake() {
                return new NormalBrake();
            }
        }
    
  • Audi Q7 工厂类
        public class Q7Factory extends CarFactory {
            @Override
            public ITire createTire() {
                return new SUVTire();
            }
            
            @Override
            public IEngine createEngine() {
                return new ImportEngine();
            }
            
            @Override
            public IBrake createBrake() {
                return new SeniorBrake();
            }
        }
    
4、客户类:
    public class Client {
        public static void main(String [] args) {
            //构造一个生产Q3的工厂
            CarFactory factoryQ3 = new Q3Factory();
            factoryQ3.createTire().tire();
            factoryQ3.createEngine().engine();
            factoryQ3.createBrake().brake();
            
            //构造一个生产Q7的工厂
            CarFactory factoryQ7 = new Q7Factory();
            factoryQ7.createTire().tire();
            factoryQ7.createEngine().engine();
            factoryQ7.createBrake().brake();
        }
    }
  • 输出:
    普通轮胎
    国产发动机
    普通制动
    
    越野轮胎
    进口发动机
    高级制动

你可能感兴趣的:(设计模式之抽象工厂模式)