• 抽象工厂


    一、大致结构

    1、抽象产品类

    2、抽象工厂类

    3、具体工厂类

    4、具体产品类

    5、静态工厂类

    二、代码(模拟买东西送东西的场景)

    1、抽象产品类

    MainProduct.java

    package com.abstractfactory;
    
    public abstract class MainProduct {
        
        public abstract void setName(String name);
        
        public abstract String getName();
        
    }

    FreeProduct.java

    package com.abstractfactory;
    
    public abstract class FreeProduct {
    
        public abstract void setName(String name);
    
        public abstract String getName();
    
    }

    2、抽象工厂类

    AbstractFactory.java

    package com.abstractfactory;
    
    public abstract class AbstractFactory {
    
        public abstract MainProduct createMainProduct();
        
        public abstract FreeProduct createFreeProduct();
        
    }

    3、具体产品类

    Computer.java

    package com.abstractfactory;
    /**
     * 电脑,附赠品是鼠标垫
     * @author may
     *
     */
    public class Computer extends MainProduct {
        
        private String name;
    
        @Override
        public void setName(String name) {
            this.name = name;
    
        }
    
        @Override
        public String getName() {
            return this.name;
        }
    
    }

    Mousepad.java

    package com.abstractfactory;
    
    /**
     * 鼠标垫,电脑的附赠品
     * @author may
     *
     */
    public class Mousepad extends FreeProduct {
        
        private String name;
    
        @Override
        public void setName(String name) {
            this.name = name;
            
        }
    
        @Override
        public String getName() {
            return this.name;
        }
    
    }

    Barbecue.java

    package com.abstractfactory;
    
    /**
     * 烧烤,附赠品是水
     * @author may
     *
     */
    public class Barbecue extends MainProduct {
    
        private String name;
        
        @Override
        public void setName(String name) {
            this.name = name;
            
        }
    
        @Override
        public String getName() {
            return this.name;
        }
    
    }

    Water.java

    package com.abstractfactory;
    
    public class Water extends FreeProduct {
        //品牌名
        private String name;
    
        @Override
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String getName() {
            return this.name;
        }
    
        
        
    }

    4、具体工厂类

    BarbecueFactory.java

    package com.abstractfactory;
    /**
     * 买烧烤,送水
     * @author may
     *
     */
    public class BarbecueFactory extends AbstractFactory {
    
        @Override
        public MainProduct createMainProduct() {
            return new Barbecue() ;
        }
    
        @Override
        public FreeProduct createFreeProduct() {
            return new Water();
        }
    
    }

    ComputerFactory.java

    package com.abstractfactory;
    
    /**
     * 买台电脑,送鼠标垫
     * @author may
     *
     */
    public class ComputerFactory extends AbstractFactory {
        
        @Override
        public MainProduct createMainProduct() {
            return new Computer();
        }
    
        @Override
        public FreeProduct createFreeProduct() {
            return new Mousepad();
        }
    
    }

    5、配置文件

    FactoryList.properties

    ComputerFactory=com.abstractfactory.ComputerFactory
    BarbecueFactory=com.abstractfactory.BarbecueFactory

    6、加载配置类

    PropertiesUtil.java

    package com.abstractfactory;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Properties;
    
    public class PropertiesUtil {
    
        private static Properties props = null;
    
        static {
    
            props = new Properties();
    
            try {
                props.load(PropertiesUtil.class.getResourceAsStream("/FactoryList.properties"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public static String getProperty(String name) {
    
            return props.getProperty(name);
        }
    
        public static void getFactoryList() {
    
            BufferedReader in;
            try {
                in = new BufferedReader(new InputStreamReader(
                        PropertiesUtil.class.getResourceAsStream("/FactoryList.properties"), "utf-8"));
    
                String line = in.readLine();
                
                while (line != null) {
                    line = line.substring(0, line.indexOf("="));
                    System.out.println(line);
                    line = in.readLine();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
    }

    7、静态工厂类

    CreateFactory.java

    package com.abstractfactory;
    
    public class CreateFactory {
        
        
    
        public static AbstractFactory createFactory(String name) {
            
            String className = PropertiesUtil.getProperty(name);
            AbstractFactory factory = null;
            try {
                factory = (AbstractFactory) Class.forName(className).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            return factory;
            
        }
        
    }

    8、测试类

    Customer.java

    package com.abstractfactory;
    
    public class Customer {
    
        public static void main(String[] args) {
            AbstractFactory factory = CreateFactory.createFactory("ComputerFactory");
            MainProduct mainProduct = factory.createMainProduct();
            mainProduct.setName("华硕笔记本电脑");
            FreeProduct freeProduct = factory.createFreeProduct();
            freeProduct.setName("超级鼠标垫");
            System.out.println("你购买了" + mainProduct.getName() + "附赠你" + freeProduct.getName() + "一个");
            
            
            
        }
        
    }
  • 相关阅读:
    Java继承关系的父子类中相同的成员变量
    MVC写在Model文件夹下,登录注册等页面定义的变量规则,不会被更新实体模型删除
    手动新建MVC控制器和视图,以及数据显示的问题
    创建简单的MVC项目
    复习i++和++j
    ViewBag的简单使用
    ValidationMessageFor验证
    Cookie的简单使用
    MVC3中 ViewBag、ViewData和TempData的使用和区别
    C#的GridView控件复习
  • 原文地址:https://www.cnblogs.com/honger/p/5961857.html
Copyright © 2020-2023  润新知