zoukankan      html  css  js  c++  java
  • Java--工厂模式

    设计模式:

    是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验总结。

    工厂模式:

    实例化对象,用工厂方法代替new操作。

    工厂模式包括工厂方法模式和抽象工厂模式

    抽象工厂模式是工厂方法模式的扩展

    意图:

    定义一个接口来创建对象,但是让子类来决定那些类需要被实例化

    工厂方法把实例化的工作推迟到子类中实现

    什么时候适合工厂模式:

    有一组类似的对象需要创建。

    在编码是不能遇见需要创建那种类的实例

    系统需要考虑扩张性,不依赖于产品类实例如何被创建

    首先客户端需要创建多样的发型

    package com.nyan.factory;
    /**
     * client 
     * @author Administrator
     *
     */
    public class HairTest {
    
        public static void main(String[] args) {
    //        HairInterface  left = new LeftHair();
    //        left.drow();
    //        HairInterface  right = new RightHair();
    //        right.drow();
            
            HairFactory factory = new HairFactory();
            factory.getHair("left").drow();
            factory.getHairByClass("com.nyan.factory.RightHair").drow();
            factory.getHairByClassKey("left").drow();
        }
    
    }

    通过工厂替客户端创建格式各类的发型:

    package com.nyan.factory;
    
    import java.util.Map;
    
    /**
     * 发型工厂
     * @author Administrator
     *
     */
    public class HairFactory {
    
        public HairInterface getHair(String key){
            if("left".equals(key)){
                return new LeftHair();
            }else if("right".equals(key)){
                return new RightHair();
            }
            return null;
        }
        /**
         * 利用反射,根据类名生成对象
         * @return
         */
        public HairInterface getHairByClass(String className){
            try {
                HairInterface hair = (HairInterface)Class.forName(className).newInstance();
                return hair;
            } catch (InstantiationException | IllegalAccessException
                    | ClassNotFoundException e) {
                e.printStackTrace();
            }
            return null;
        }
        
        public HairInterface getHairByClassKey(String key){
            try {
                Map<String, String> map =new PropertiesReader().getProperties();
                HairInterface hair = (HairInterface)Class.forName(map.get(key)).newInstance();
                return hair;
            } catch (InstantiationException | IllegalAccessException
                    | ClassNotFoundException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    利用抽象方法提供实现各种发型的类

    package com.nyan.factory;
    /**
     * 发型接口
     * @author Administrator
     *
     */
    public interface HairInterface {
        public void drow();
    }
    package com.nyan.factory;
    
    public class LeftHair implements HairInterface {
    
        @Override
        public void drow() {
            System.out.println("---左分发型---");
        }
    
    }
    RightHair、InHair。。。

    利用配置文件实现类的映射

    right=com.nyan.factory.RightHair
    left=com.nyan.factory.LeftHair

    读取配置文件:

    package com.nyan.factory;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Properties;
    
    public class PropertiesReader {
    
        public Map<String,String> getProperties(){
            Properties props = new Properties();
            Map<String,String> map = new HashMap<String, String>();
            InputStream in = getClass().getResourceAsStream("type.properties");
            try {
                props.load(in);
                Enumeration enumeration = props.propertyNames();
                while (enumeration.hasMoreElements()) {
                    String key = (String) enumeration.nextElement();
                    String value = props.getProperty(key);
                    map.put(key, value);
                }
                return map;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
            
        }
        
    }

     

  • 相关阅读:
    多行文本溢出显示省略号(…)
    CSS3 grayscale滤镜图片变黑白实例页面
    腾讯TGideas语义化标签(转)
    jQuery Ajax通用js封装
    动态加载 js
    Javascript的四种继承方式
    Android四大组件之Activity
    Android四大组件通信的Intent介绍和详解
    oracle学习笔记(十四) 数据库对象 索引 视图 序列 同义词
    oracle学习笔记(十三) 查询练习(三) 子查询查询
  • 原文地址:https://www.cnblogs.com/Nyan-Workflow-FC/p/6483218.html
Copyright © 2011-2022 走看看