zoukankan      html  css  js  c++  java
  • 第六讲、抽象工厂模式

    1.定义

    抽象工厂模式是所有形态的工厂模式最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。

    2.产品族和产品等级结构

    3.模式中包含的角色及其职责

    • 抽象工厂角色(Creator)-- 抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口
    • 具体工厂角色(Concrete Creator)-- 具体工厂类是抽象工厂的一个实现,负责实现某个产品族中的产品对象
    • 抽象角色(Product)-- 抽象模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口
    • 具体产品角色(Concrete Product)-- 抽象gong模式所创建的具体实例对象

    总结:抽象工厂中方法对应产品结构,具体工厂对应产品族。

    4.代码演示

    package test.com.abstractFactory;
    /**
     * Product(抽象角色)
     */
    public interface Fruit {
        
        public void get();
    }
    package test.com.abstractFactory;
    
    public abstract class Apple implements Fruit {
    
        public abstract void get();
    
    }
    package test.com.abstractFactory;
    
    public abstract class Banana implements Fruit {
    
        public abstract void get();
    
    }
    package test.com.abstractFactory;
    /**
     * Concrete Product(具体产品角色)
     */
    public class NorthApple extends Apple {
    
        @Override
        public void get() {
            System.out.println("采集北方苹果"); 
        }
    
    }
    package test.com.abstractFactory;
    /**
     * Concrete Product(具体产品角色)
     */
    public class SouthApple extends Apple {
    
        @Override
        public void get() {
            System.out.println("采集南方苹果");
        }
    
    }
    package test.com.abstractFactory;
    /**
     * Concrete Product(具体产品角色)
     */
    public class NorthBanana extends Banana {
    
        @Override
        public void get() {
            System.out.println("采集北方香蕉");
        }
    
    }
    package test.com.abstractFactory;
    /**
     * Concrete Product(具体产品角色)
     */
    public class SouthBanana extends Banana {
    
        @Override
        public void get() {
            System.out.println("采集南方香蕉");
        }
    
    }
    package test.com.abstractFactory;
    /**
     * Creator(抽象工厂角色)
     */
    public interface FruitFactory {
        
        public Fruit getApple();
        
        public Fruit getBanana();
    }
    package test.com.abstractFactory;
    /**
     * Concrete Creator(具体工厂角色)
     */
    public class NorthFruitFactory implements FruitFactory {
    
        @Override
        public Fruit getApple() {
            return new NorthApple();
        }
    
        @Override
        public Fruit getBanana() {
            return new NorthBanana();
        }
    
    }
    package test.com.abstractFactory;
    /**
     * Concrete Creator(具体工厂角色)
     */
    public class SouthFruitFactory implements FruitFactory {
    
        @Override
        public Fruit getApple() {
            return new SouthApple();
        }
    
        @Override
        public Fruit getBanana() {
            return new SouthBanana();
        }
    
    }
    package test.com.abstractFactory;
    /**
     * 测试
     */
    public class MainClass {
        public static void main(String[] args) {
            FruitFactory ff = new NorthFruitFactory();
            Fruit f = ff.getApple();
            f.get();//采集北方苹果
            Fruit f1 = ff.getBanana();
            f1.get();//采集北方香蕉
            
            FruitFactory ff2 = new SouthFruitFactory();
            Fruit f2 = ff2.getApple();
            f2.get();//采集南方苹果
            Fruit f3 = ff2.getBanana();
            f3.get();//采集南方香蕉
            
        }
    }
  • 相关阅读:
    TODO 模板实践
    C++类继承方式及实践
    【转】C++友元
    C++面向对象实践
    数组指针实践
    引用&指针交换函数实践
    左值引用&右值引用实践【TODO】
    const变量的修改实践
    【转】c语言动态与静态分配
    【转】数组指针&指针数组
  • 原文地址:https://www.cnblogs.com/zheaven/p/9964945.html
Copyright © 2011-2022 走看看