16---java反射机制06(工厂设计模式)
2012-03-06 14:49
211 查看
工厂设计模式:最大的有点就是解耦合;
interface Fruit{
public void eat();//吃水果
}
class Apple implements Fruit{
public void eat(){
System.out.println("吃苹果");
}
}
class Orange implements Fruit{
public void eat(){
System.out.println("吃橘子");
}
}
class Factory{
public static Fruit getInstance(String className){
Fruit fruit=null;
if("apple".equals(className)){
fruit=new Apple();
}
if("orange".equals(className)){
fruit=new Orange();
}
return fruit;
}
}
public class Demo{
public static void main(String args[]){
Fruit f=Factory.getInstance("apple");
if(f!=null){
f.eat();
}
}
}
此时扩充子类,就得修改工厂;如果想扩充子类同时不用修改工厂类的话,则必须使用反射完成;
interface Fruit{
public void eat();//吃水果
}
class Apple implements Fruit{
public void eat(){
System.out.println("吃苹果");
}
}
class Orange implements Fruit{
public void eat(){
System.out.println("吃橘子");
}
}
class Factory{
public static Fruit getInstance(String className){
Fruit fruit=null;
try{
fruit=(Fruit)Class.forName(className).newInstance();
}
catch(Exception e){
}
return fruit;
}
}
public class Demo{
public static void main(String args[]){
Fruit f=Factory.getInstance("Apple");//“包.类”名称
if(f!=null){
f.eat();
}
}
}
上面实现了扩充子类不用修改工厂,但是也存在一些问题,就是用户必须输入完整的包点类名称;
这样很麻烦,此时可以通过配置文件的方式保存这些完整的类路径---属性文件;
程序运行的时候,就可以将属性文件的内容读取出来,之后直接操作属性文件的key,就
避免了输入过多的类路径了;
interface Fruit{
public void eat();//吃水果
}
class Apple implements Fruit{
public void eat(){
System.out.println("吃苹果");
}
}
class Orange implements Fruit{
public void eat(){
System.out.println("吃橘子");
}
}
class Factory{
public static Fruit getInstance(String className){
Fruit fruit=null;
if("apple".equals(className)){
fruit=new Apple();
}
if("orange".equals(className)){
fruit=new Orange();
}
return fruit;
}
}
public class Demo{
public static void main(String args[]){
Fruit f=Factory.getInstance("apple");
if(f!=null){
f.eat();
}
}
}
此时扩充子类,就得修改工厂;如果想扩充子类同时不用修改工厂类的话,则必须使用反射完成;
interface Fruit{
public void eat();//吃水果
}
class Apple implements Fruit{
public void eat(){
System.out.println("吃苹果");
}
}
class Orange implements Fruit{
public void eat(){
System.out.println("吃橘子");
}
}
class Factory{
public static Fruit getInstance(String className){
Fruit fruit=null;
try{
fruit=(Fruit)Class.forName(className).newInstance();
}
catch(Exception e){
}
return fruit;
}
}
public class Demo{
public static void main(String args[]){
Fruit f=Factory.getInstance("Apple");//“包.类”名称
if(f!=null){
f.eat();
}
}
}
上面实现了扩充子类不用修改工厂,但是也存在一些问题,就是用户必须输入完整的包点类名称;
这样很麻烦,此时可以通过配置文件的方式保存这些完整的类路径---属性文件;
程序运行的时候,就可以将属性文件的内容读取出来,之后直接操作属性文件的key,就
避免了输入过多的类路径了;
相关文章推荐
- 设计模式--------工厂模式
- 设计模式之工厂方法模式
- 设计模式------2.简单工厂模式
- 设计模式之一 简单工厂
- 设计模式:简单工厂模式和工厂方法模式的区别
- Java设计模式(2)创建型:工厂模式(工厂方法模式与抽象工厂模式)
- C++实现设计模式之——工厂模式
- 设计模式之---简单工厂模式
- 设计模式之简单工厂模式
- 设计模式——工厂模式之工厂方法
- 工厂设计模式之企业实战
- 【设计模式】工厂三姐妹
- 设计模式——用Java实现工厂模式
- 【设计模式学习笔记】 之 简单工厂模式
- 设计模式-------工厂
- 设计模式最佳实之工厂模式
- 设计模式之---工厂模式
- 设计模式学习之路-简单工厂模式
- PHP设计模式-工厂模式
- 设计模式1:简单工厂模式【创建型】