首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

抽象工场模式学习

2012-10-31 
抽象工厂模式学习抽象在厂模式用文字语言讲呢,没有意思,听了半天也没有什么意思..也学不进去,,那么我就做

抽象工厂模式学习

抽象在厂模式用文字语言讲呢,没有意思,听了半天也没有什么意思..也学不进去,,

那么我就做一个例子来..讲解抽象工厂模式::

????? 有一个产品接口

package com.newer.abstractfactory;

public interface Product {
// 有一个无实现的方法

??? public void f();
}

然后有两个厂商 一个是IBM 一个是DELL

?

//Dell

package com.newer.abstractfactory;

public class DellProduct implements Product {

?public void f() {
??// TODO Auto-generated method stub
???????????? System.out.println("dellProduct f()...........");
?}

}

//IBM

public class IBMProduct implements Product {

?public void f() {
??// TODO Auto-generated method stub
?? System.out.println("IBMProduct f()...........");
?}

}

package com.newer.abstractfactory;

搞一个抽象工厂...这个工厂有两个作用.生产产品的,和生产工厂的

package com.newer.abstractfactory;

public abstract class AbstractFactory {
?private static String productName = "IBMProduct";

?public static AbstractFactory getInstance() {
??AbstractFactory af = null;
??try {

//?反射?? 搞的 类名用到了字符串,,有字符串这就己为着可以从配置中读出来.这就解出了.产品工厂.和抽象工厂 各自这间的的偶和.
???af = (AbstractFactory)Thread.currentThread().getContextClassLoader().loadClass(productName).newInstance();
??} catch (Exception e) {
???// TODO: handle exception
???e.printStackTrace();
??}
??return af;
?}

?public abstract Product createProduct();

?public static String getProductName() {
??return AbstractFactory.productName;
?}

?public static void setProductName(String productName) {
??AbstractFactory.productName = productName;
?}
}

//然后就是两个产品的工厂类

//dell? IBm

package com.newer.abstractfactory;

public class DellProductFactory extends AbstractFactory{
????? public Product createProduct(){
??? ?? return new DellProduct();
????? }
}

package com.newer.abstractfactory;

public class IBMProductFactory extends AbstractFactory{
?????? public Product createProduct(){
??? ??? return new IBMProduct();
?????? }
}

?

以上两个工厂类是生产各自的产品......完全体现解除偶和

?

现在就是差一个客户端程序员来用这个抽象工厂了

?

package com.newer.abstractfactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

public class Test {

?/**
? * @param args
? */
?public static void main(String[] args)throws Exception {
??// TODO Auto-generated method stub
???????? try {
??????? ? File file = new File("src/com/newer/abstractfactory/product.properties");
??????? ? InputStream is = new FileInputStream(file);
??????? ?
??????? ?System.out.println(is);
???Properties prop = new Properties();
???prop.load(is);
???String factoryName = prop.getProperty("product");
???System.out.println("factory:::"+factoryName);
???AbstractFactory.setProductName(factoryName);
???
???AbstractFactory af = AbstractFactory.getInstance();
???Product p = af.createProduct();
???p.f();
??} catch (Exception e) {
???// TODO: handle exception
???e.printStackTrace();
??}
?}

}

?

?

还有一个java属性文件的内容product.properties

?product=com.newer.abstractfactory.IBMProductFactory

现在就可以看效果了..现在我生产产品,,就解除了偶和..生产什么产品,,都不用改代码了.只要改配置文件就可以了.

只要配置文件一改,产品就换了.不动其它的代码..

有可能我说的不够好...大家多提一点意见啊,

请一下啊

?

?