抽象工厂模式学习

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

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

      有一个产品接口

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

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

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

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

请一下啊

 

 


内容概要:本文详细介绍了Rust在系统编程中的应用,包括基础知识、核心技术及开发流程。首先阐述了Rust语言的基础及环境搭建,强调了其强类型系统和现代语法。接着深入探讨了所有权机制与内存安全,指出Rust通过所有权系统确保内存安全,避免悬垂指针和内存泄漏。再者,讲解了Rust的并发编程模型,通过消息传递和无数据竞争的线程模型实现安全并发。此外,讨论了Rust在底层硬件访问与嵌入式开发中的应用,展示了其在资源受限平台上的适应性。随后,介绍了系统调用与内核模块开发,说明了Rust如何调用操作系统底层API并实现与现有内核代码的无缝集成。还提及了性能优化与调试技巧,如使用编译器优化选项和工具链支持。最后,通过实战项目案例解析和社区资源展望,展示了Rust在系统编程领域的潜力和发展前景。; 适合人群:有一定编程基础,尤其是对系统编程感兴趣的开发者,包括操作系统内核开发、驱动程序编写、嵌入式系统开发等领域的工程师。; 使用场景及目标:①学习Rust语言的基础知识和环境搭建,掌握强类型系统和现代语法;②理解所有权机制与内存安全,避免传统系统编程中的常见错误;③掌握并发编程模型,实现安全高效的多线程操作;④了解底层硬件访问和嵌入式开发,适应资源受限平台;⑤掌握系统调用与内核模块开发,实现与现有系统的无缝集成;⑥学习性能优化与调试技巧,提高系统软件的运行效率和稳定性;⑦通过实战项目案例解析,掌握系统编程的实际应用。; 其他说明:Rust作为系统编程的新选择,不仅提升了传统系统软件的安全性,还通过现代语言特性和工具链优化了开发效率。开发者应充分利用Rust的特性,构建更加健壮、高效的系统软件,迎接未来计算机领域的新挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值