zoukankan      html  css  js  c++  java
  • 工厂设计模式

    什么是设计模式

    • 一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。简单理解:特定问题的固定解决方法。
    • 好处:使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、重用性。

    工厂设计模式

    • 工厂模式主要负责对象创建的问题。
    • 开发中有一个非常重要的原则 “开闭原则”,对拓展开放,对修改关闭。
    • 可通过反射进行工厂模式的设计,完成动态的对象创建。

    工厂类:

    package com.kingtl.DesignDemo;
    
    /**
     * 工厂类
     */
    public class UsbFactory {
    
        public static Usb createUsb(String type) { // 类型的全名称
            Usb usb = null;
            Class<?> class1 = null;
            try {
                class1 = Class.forName(type);
                usb = (Usb) class1.newInstance();
    
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
    
            return usb;
        }
    }
    
    

    客户端测试类:

    package com.kingtl.DesignDemo;
    
    import java.io.FileInputStream;
    import java.util.Properties;
    import java.util.Scanner;
    
    /**
     * 客户程序
     */
    public class Demo {
        public static void main(String[] args) throws Exception {
            System.out.println("=======请选择   1、鼠标    2、风扇   3、U盘========");
            Scanner input = new Scanner(System.in);
            String choice = input.next();
            // 1  =  com.kingtl.DesignDemo.Mouse
            // 2  =  com.kingtl.DesignDemo.Fan
            // 3  =  com.kingtl.DesignDemo.Upan
            // 4  =  com.kingtl.DesignDemo.KeyBoard
            Properties properties = new Properties();
            FileInputStream fis = new FileInputStream("src\usb.properties");
            properties.load(fis);
            fis.close();
    
            Usb usb = UsbFactory.createUsb(properties.getProperty(choice));
    
            if (usb != null) {
                System.out.println("购买成功!");
                usb.service();
            } else {
                System.out.println("购买失败,您要购买的产品不存在!");
            }
        }
    }
    
    

    配置文件:

    1=com.kingtl.DesignDemo.Mouse
    2=com.kingtl.DesignDemo.Fan
    3=com.kingtl.DesignDemo.Upan
    4=com.kingtl.DesignDemo.KeyBoard
    5=com.kingtl.DesignDemo.Mouse2
    
  • 相关阅读:
    python之Queue
    rebase after merge
    Heroku使用note
    Adapter, Proxy, Decrator, and AOP
    How rackup works
    sonar插件实战
    2012rubyconfchina小记
    Sonar安装使用篇
    sonar原理扩展篇
    javascript 实现拖动效果
  • 原文地址:https://www.cnblogs.com/KingTL/p/13521175.html
Copyright © 2011-2022 走看看