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

    @

    一、概述

    抽象工厂模式也是属于设计模式中的创建型模式,用于产品族的构建,抽象工厂模式是所有形态的工厂模式中最为具有一般性的一种形态。抽象工厂是指当有多个角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,是客户端在不必指定产品的具体情况下,创建多个产品族的产品对象。

    二、模式结构图

    在这里插入图片描述

    三、Java代码实现

    还是以水果举例首先我们要分别创建水果接口和水果工厂接口

    package 抽象工厂模式;
    
    public interface Fruit {
    //	生产水果-接口
    	public void get();
    }
    
    package 抽象工厂模式;
    
    public interface FruitFactory {
    	public Fruit getApple();
    	public Fruit getBanana();
    }
    

    创建具体水果的抽象类,让具体水果抽象类实现水果接口

    package 抽象工厂模式;
    
    public abstract class Apple implements Fruit{
    //	苹果抽象类
    	public abstract void get();
    }
    
    package 抽象工厂模式;
    
    public abstract class Banana implements Fruit{
    //	香蕉抽象类
    	public abstract void get();
    }
    

    创建具体的水果类,每个水果都分为A、B两个等级。

    package 抽象工厂模式;
    //Apple_A 继承Apple
    public class Apple_A extends Apple{
    	@Override
    	public void get() {
    		System.out.println("生产A级-苹果");
    	}
    }
    
    package 抽象工厂模式;
    // Apple_B继承Apple类
    public class Apple_B extends Apple{
    	@Override
    	public void get() {
    		System.out.println("生产B级-苹果");
    	}
    }
    

    分别创建生产A级水果和B级水果的A类工厂和B类工厂,并实现工厂接口

    package 抽象工厂模式;
    //	FruitFactory_calssA 要去实现 FruitFactory
    public class FruitFactory_calssA implements FruitFactory{
    //  A级水果工厂只生产A级水果
    	@Override
    	public Fruit getApple() {
    //		生产A级苹果
    		return new Apple_A();
    	}
    
    	@Override
    	public Fruit getBanana() {
    //		生产A级香蕉
    		return new Banana_A();
    	}
    
    }
    
    public class FruitFactory_calssB implements FruitFactory{
    //   B级水果工厂只生产B级水果
    	@Override
    	public Fruit getApple() {
    //		生产B级苹果
    		return new Apple_B();
    	}
    
    	@Override
    	public Fruit getBanana() {
    //		生产B级香蕉
    		return new Banana_B();
    	}
    
    }
    

    调用演示*

    package 抽象工厂模式;
    
    public class test {
    public static void main(String[] args) {
    
    	FruitFactory f1 = new FruitFactory_calssA();
    	FruitFactory f2 = new FruitFactory_calssB();
    //	Apple
    	Fruit apple_A = f1.getApple();
    	apple_A.get();
    	Fruit apple_B= f2.getApple();
    	apple_B.get();
    // 	Banana
    	Fruit banana_A = f1.getBanana();
    	banana_A.get();
    	Fruit banana_B = f2.getBanana();
    	banana_B.get();
    }
    }
    

    在这里插入图片描述

    四、工厂方法模式和抽象工厂模式比较

    工厂方法模式中的每一个形态都是针对一定的问题的解决方案,针对的是多个产品系列结构;而抽象工厂模式针对的是多个产品族结构,一个产品内有多个产品系列。

  • 相关阅读:
    CentOS7 搭建php环境
    多tomcat服务和nginx负载均衡配置
    linux grep命令
    centos7 远程连接其他服务器redis
    centos7 远程连接其他服务器mysql
    关于结构体对齐
    c语言打印一个整数的二进制形式
    c语言判断一个数是否为偶数
    vim的窗口切换
    pow(x,y)函数的实现算法(递归函数)
  • 原文地址:https://www.cnblogs.com/geq2020/p/12592104.html
Copyright © 2011-2022 走看看