昨天晚上做了一个工厂模式的练习,通过XML配置把工厂要生成的具体类传给工厂,这样当有更多类实现接口时就只需要修改一下XML配置就可以了,省去了修改代码的麻烦。
睡觉时想了一点可以把工厂类要用的一些类设计为单例,那样可以效果更好一点。本人认为单例一般有三个步骤,具体的在代码中有详细说明,只是浅见,希望指教。
把代码贴出来一下,有什么地方可以改进的地方大家可以发表一下意见,共同提高。
car接口
package myFactoryDemo;
public interface car {
void run();
void stop();
}
smallcar 类
package myFactoryDemo;
public class smallcar implements car {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("smallcar is running ");
}
@Override
public void stop() {
System.out.println("smallcar is stopped ");
}
}
bigcar 类
package myFactoryDemo;
public class bigcar implements car {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("bigcar is running ");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("bigcar is stopped ");
}
}
把实现了car接口的类都生成XML,放到XML文件中
package myFactoryDemo;
import java.io.* ;
import java.util.* ;
public class beforeFactory
{
public static void main(String args[]) throws Exception
{
Properties p = new Properties() ;
p.setProperty("s","myFactoryDemo.smallcar") ;
p.setProperty("b","myFactoryDemo.bigcar") ;
p.storeToXML(new FileOutputStream("zhw.xml"),"fhqxawfnh") ;
p.loadFromXML(new FileInputStream("zhw.xml")) ;
System.out.println(p) ;
}
};
测试主类
package myFactoryDemo;
import java.util.Properties;
public class myFactory {
public static void main(String args[]) {
Properties p = new Properties();
p = InitXML.getInstance().getPropertiesInit();
System.out.println(p);
// 加入一个可以从键盘输入数据的类
System.out.print("输入要使用的子类代码:");
String code = new InputData().getString();
car f = Factory.getInstance().getFruitInstance(p.getProperty(code));
if (f != null) {
f.run();
f.stop();
} else {
System.out.println("没有发现这个类型。");
}
}
}
测试主类要用到几个工具类,以下列出,不再一一介绍。
package myFactoryDemo;
import java.io.FileInputStream;
import java.util.Properties;
public class InitXML {
//单例模式第一步 把本类的构造函数设为私有
private InitXML(){}
//单例模式第二步 生成一个自身类类型的静态私有成员变量
private static InitXML initxml = new InitXML();
public Properties getPropertiesInit() {
Properties p = new Properties();
try {
p.loadFromXML(new FileInputStream("zhw.xml"));
} catch (Exception e) {
}
return p;
}
//单例模式第三步 公共静态方法返回自身类型的静态变量
public static InitXML getInstance() {
return initxml;
}
}
package myFactoryDemo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class InputData {
BufferedReader buf = null;
public InputData() {
buf = new BufferedReader(new InputStreamReader(System.in));
}
public String getString() {
String str = null;
try {
str = buf.readLine();
} catch (Exception e) {
}
return str;
}
}
package myFactoryDemo;
public class Factory {
private static Factory carfactory = new Factory();
private Factory(){}
public static Factory getInstance(){
return carfactory;
}
public car getFruitInstance(String type) {
car f = null;
// 通过Class类完成
try {
f = (car) Class.forName(type).newInstance();
} catch (Exception e) {
System.out.println(e);
}
return f;
}
}
分享到:
相关推荐
单例模式和工厂模式结合应用,实现了产品的生产,适合用做课程设计,包含详细文档和代码。Java语言。喜欢的可以下载来看看那
NULL 博文链接:https://xieyan30.iteye.com/blog/1695483
设计模式源代码--工厂模式与单例。 代码是本人在学习设计模式时,所写的例子。 适合设计模式的初学者看。
细心整合和单例模式和工厂模式的几种模型,懒汉式,饿汉式,如何并发操作模式,等都有详细讲解
php单例模式php单例模式php单例模式php单例模式
基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等 Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式...
自己用VC2010写的工厂模式和单例模式的实现
主要介绍了PHP设计模式之工厂模式与单例模式,简单介绍的工厂模式与单例模式的功能,并结合实例形式分析了工厂模式及单例模式的实现与应用,需要的朋友可以参考下
java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂
javaweb项目+设计模式(单例模式,工厂模式,动态代理,适配器)
模式就像是OOP开发人员的配方,每种模式都提供了所需的成分。模式对OOP开发人员尤其有用,因为它有助于创建稳定的API,...本章将介绍两种常用的模式:单例模式和工厂模式。前者被称为类的职责,后者被称为类的多态性。
简单工厂模式、抽象工厂模式、工厂方法模式、饿汉单例模式、懒汉单例模式
java 三种设计模式Demo 其中对单例模式做了详细的讲解,及性能和线程安全方面的优化其中Singleton.java为经典单例模式。
24设计模式之禅 代理模式、单例模式、工厂模式实例代码 DEMO
主要介绍了PHP工厂模式、单例模式与注册树模式,结合实例形式工厂模式、单例模式与注册树模式的基本概念、原理、实现方法及使用技巧,需要的朋友可以参考下
NULL 博文链接:https://51even.iteye.com/blog/768097
java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂 第二部分
设计模式