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;

    }

}

时间: 2024-10-12 00:09:49

Java--工厂模式的相关文章

Java工厂模式

Java工厂模式 看了这么多关于工厂模式的解说,还是认为这篇文章讲的好理解,贴出来和大家分享分享. 一.引子 话说十年前,有一个****户,他家有三辆汽车--Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.只是,****户坐车时总是怪怪的:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上Audi说"开奥迪车!".你一定说:这人有病!直接说开车不即可了?! 而当把这个****户的行为放到我们程序设计中来时,会发

Java工厂模式(Factory模式)

工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量. 我们以类Sample为例,

java 工厂模式变形的多种应用

工厂模式在项目开发中是使用效率非常高的,意思就是说定义一个用于创建对象的接口,让子类去决定实例化哪一个类.这就是一个工厂类的示意图 接着来一个简单的例子: 如上图所示,我们首先定义我们的产品抽象类接口,也可以是抽象类: package factory; public abstract class PlatForm { public void search(){ System.out.println("你搜索的结果是......"); } public abstract void mus

Java 工厂模式学习

工厂模式分三种:简单工厂.工厂方法.抽象工厂.其中抽象工厂是用于多个产品族的情况.所谓产品族就是不同产品组成的有机整体,各不同产品之间相互依赖.打个比方,一台电脑有CPU.主板.内存和硬盘等,这些不同产品组成了一个产品族.就好比Dell和HP要把这些产品进行不同的组装,这时就需要用到抽象工厂.以下是代码演示: 简单工厂,可以用反射实现: 首先定义产品的抽象接口 package com.demo.SimpleFactory; public interface CPU { public void r

自己理解的java工厂模式,希望对大家有所帮助

[http://www.360doc.com/content/11/0824/17/3034429_142983837.shtml] 这两天突然想学学java源代码,不过看到一篇文章说看java源代码要先看设计模式,这样更容易理解源代码的结构,所以就准备学学java设计模式,首先当然是看java创建模式的工厂模式了,刚开始直接看抽象工厂模式是什么意思,百度百科的实在是看不懂,后来又在网上看了看其他的文章,仔细思考后,还算是理解了,现在跟大家分享下. 首先说说简单工厂模式,我用现实中的汽车工厂举例

Java工厂模式(简单工厂、工厂方法、抽象工厂)

工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory Method).3:抽象工厂(Abstract Factory). 简单工厂(Simple Factory)又叫静态工厂,是工厂模式三中状态中结构最为简单的.主要有一个静态方法,用来接受参数,并根据参数来决定返回实现同一接口的不同类的实例.我们来看一个具体的例子:假设一家工厂,几生产洗衣机,有生产冰箱

JAVA 工厂模式(转载)

一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品:             这三种模式从上到下逐步抽象,并且更具一般性.             GOF在<

Java—工厂模式

工厂模式: public interface Cookie { public abstract void run (); } public abstract class CookieFactory { abstract Cookie create(); } public class BearCookie implements Cookie{ public void run (){ System.out.println("正在制作小熊饼干"); } } public class Numb

JAVA 工厂模式:简单工厂

简单工厂模式(SimpleFactory Pattern): 又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 1. 汽车接口 package com.lf.shejimoshi.Factory; /** * @classDesc: 类描述:(汽车接口) * @author baobaolan * @createTim

java工厂模式Factory

工厂模式: 1)我们首先要设计车汽车需要那些流程(face) package light.zhang.model.model.facotry; /** * 车子建造过程,定义好流程 * @author witts * */ public interface ICarface { /** * 绘制图片 */ void drawImage(); /** * 设计模型 */ void createModel(); /** * 实现生产 */ void implCar(); /** * 测试车子 */