二、创建型模式——工厂模式
来源:互联网 发布:编制软件 编辑:程序博客网 时间:2024/05/16 08:52
对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题
工厂模式:
以下是要创建的产品的类:
/** * 需要的产品接口 * @author ZhangJiaMin */public interface ProductInterface { //实现了产品功能 public void doIt();}
/** * 产品_1_1 * @author ZhangJiaMin */public class Product_1_1 implements ProductInterface { @Override public void doIt() { System.out.println("Product_1_1"); }}
/** * 产品_1_2 * @author ZhangJiaMin */public class Product_1_2 implements ProductInterface { @Override public void doIt() { System.out.println("Product_1_2"); }}
工厂类:
import java.util.Map;public class ProductFactory { /** * 根据需求创建同一接口下的不同对象 * @param key * @return */ public ProductInterface getProductByClasskey(String key){ try { Map<String,String> map = new PropertiesReader().getProperties(); ProductInterface product = (ProductInterface) Class.forName(map.get(key)).newInstance(); return product; } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }}
此处以properties文件避免输入过长包名:
Product_1_1=\u5DE5\u5382\u6A21\u5F0F.\u5DE5\u5382\u6A21\u5F0F.Product_1_1Product_1_2=\u5DE5\u5382\u6A21\u5F0F.\u5DE5\u5382\u6A21\u5F0F.Product_1_2
再以PropertiesReader将Properties文件读取为Map集合:
package 工厂模式.工厂模式;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>(); try { InputStream in = getClass().getResourceAsStream("type.properties"); props.load(in); Enumeration en = props.propertyNames(); while (en.hasMoreElements()) { String key = (String) en.nextElement(); String property = props.getProperty(key); map.put(key, property);// System.out.println(key + " " + property); } } catch (Exception e) { e.printStackTrace(); } return map; }}
以下是测试方法:调用工厂对象生产产品
package 工厂模式.工厂模式;public class Test { public static void main(String[] args) { ProductFactory productfactory =new ProductFactory(); ProductInterface product_interface = productfactory.getProductByClasskey("Product_1_1"); product_interface.doIt(); }}
抽象工厂模式:
系列的实现接口:
package 工厂模式.抽象工厂模式;/** * 系列的实现接口 * @author ZhangJiaMin * */public interface SeriesFactory { //系列一接口 public Series_1 getSeries_1(); //系列二接口 public Series_2 getSeries_2();}
产品系列1的接口及产品:
package 工厂模式.抽象工厂模式;/** * 产品系列1 * @author ZhangJiaMin * */public interface Series_1 { public void do_1();}
package 工厂模式.抽象工厂模式;public class Series_1_1 implements Series_1 { @Override public void do_1() { System.out.println("第一个系列的1类产品"); }}
package 工厂模式.抽象工厂模式;public class Series_1_2 implements Series_1 { @Override public void do_1() { System.out.println("第一个系列的2类产品"); }}
产品系列2的接口及产品:
package 工厂模式.抽象工厂模式;/** * 产品系列2 * @author ZhangJiaMin * */public interface Series_2 { public void do_2();}
package 工厂模式.抽象工厂模式;public class Series_2_1 implements Series_2 { @Override public void do_2() { System.out.println("第二个系列的1类产品"); }}
package 工厂模式.抽象工厂模式;public class Series_2_2 implements Series_2 { @Override public void do_2() { System.out.println("第二个系列的2类产品"); }}
一类产品工厂:
package 工厂模式.抽象工厂模式;/** * 一类产品接口 * @author ZhangJiaMin * */public class Class_1Factory implements SeriesFactory { @Override public Series_1 getSeries_1() { // TODO Auto-generated method stub return new Series_1_1(); } @Override public Series_2 getSeries_2() { // TODO Auto-generated method stub return new Series_2_1(); }}
二类产品工厂:
package 工厂模式.抽象工厂模式;/** * 一类产品接口 * @author ZhangJiaMin * */public class Class_2Factory implements SeriesFactory { @Override public Series_1 getSeries_1() { // TODO Auto-generated method stub return new Series_1_2(); } @Override public Series_2 getSeries_2() { // TODO Auto-generated method stub return new Series_2_2(); }}
测试及调用:
package 工厂模式.抽象工厂模式;public class Test { public static void main(String[] args) { Class_1Factory factory = new Class_1Factory(); Series_1 series_1=factory.getSeries_1(); series_1.do_1(); }}
0 0
- 创建型模式之二——工厂方法模式
- 二、创建型模式——工厂模式
- 二:创建型模式:抽象工厂模式
- (二)创建型模式--工厂模式
- 创建型模式——工厂模式
- 创建型模式—简单工厂模式
- 创建型模式—工厂方法模式
- 创建型模式—抽象工厂模式
- 设计模式——创建型模式之工厂模式
- 创建型模式——抽象工厂
- 创建型——简单工厂模式
- 创建模式—简单工厂模式
- 创建模式—工厂方法模式
- 创建模式—抽象工厂模式
- 23种设计模式二:创建型工厂方法模式
- 二、创建型模式:抽象工厂模式(Abstract Factory)
- (创建型模式二)工厂方法模式
- 设计模式(二)工厂方法模式(FactoryMethod)-创建型
- 域名cname
- C 语言基础
- git 常用命令
- 小知识点7
- RxJava:Schedulers选择 newThread vs io
- 二、创建型模式——工厂模式
- rhel6 rhel7 fedora ubuntu windows 共存 使用grub2 os-probe 启动 使用grub的老系统 bootloader
- Android RecyclerView中实现自定义GridView的方式(实现不同item)
- JS常用方法总结(来自网络整理)
- Spring与Hibernate整合时的核心类LocalSessionFactoryBean详解
- Django配置session
- 众数
- windows下搭建MyEclipse开发环境
- 安装DirectX SDK提示Error Code: S1023