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

    在这里插入图片描述

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

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

  • 相关阅读:
    Quicksum -SilverN
    uva 140 bandwidth (好题) ——yhx
    uva 129 krypton factors ——yhx
    uva 524 prime ring problem——yhx
    uva 10976 fractions again(水题)——yhx
    uva 11059 maximum product(水题)——yhx
    uva 725 division(水题)——yhx
    uva 11853 paintball(好题)——yhx
    uva 1599 ideal path(好题)——yhx
    uva 1572 self-assembly ——yhx
  • 原文地址:https://www.cnblogs.com/geq2020/p/12592104.html
Copyright © 2011-2022 走看看