java 设计模式 工厂模式
2015-07-20 21:17
531 查看
工厂模式:
单例模式:静态工厂方法
类Car 在类内部产生产生对象
写法:
private static Car car=new Car(); //从头到尾都只有一个car
private Car(){} // 把构造方法设为空
public static Car getInstance(){
//这里就可以加上限制条件了。。。就没有直接new car 那么方便了
// if(xxxx){ xxxxx new Car()}
return car;
}
多例模式
写法:
private static List<Car> cars=new ArrayList<>(); // 多连接池
类功能可替换的写法:
申明借口,让类实现接口,
具体写法:
接口 m =new 具体类() // 替换就只要替换这个具体类就好
普通工厂模式:
这个时候的 普通 类的构造方法就是public 了
申明工厂类,只有产生(申明)新对象方法
写法:
工厂类 factory = new 工厂类();
接口 m =factory.产生新对象方法();
可替换生产过程的普通工厂模式:
申明 抽象 生产过程的工厂类,里面只有抽象 接口 申明方法
让所有工厂继承这个抽象 生产过程的工厂类
实现接口 申明方法 ,就是产生新的对象
写法:
抽象 生产过程的工厂类 factory = new 具体工厂类()
接口 m=factory.抽象 接口 申明方法();
![](http://img.blog.csdn.net/20150720211537546?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
抽象工厂:系类产品
申明工厂类,在工厂类里写上产生一系列类对象的方法
写法就是 :
工厂类 factory =new 工厂类()
对象类 对象=factory.对应产生类对象的方法()
但是可以整体替换的情况:
声明一些抽象类 里面只有一个抽象方法,就是某些同类对象所共通的必需实现的方法
申明抽象的 产生对应对象集合工厂类,里面只有多个抽象方法,对应产生上面类对象的抽象方法
所有的“同类型”实体类都必须从相同的抽象类继承
所有的 具体工厂类 必须从 抽象的 产生对应对象集合工厂类 继承,并且 具体工厂类的方法就是返回 实例化对应实体类 的方法
写法:
抽象的 产生对应对象集合工厂类 factory =new 具体工厂类() // 整体替换就只要替换这个具体工厂类就好
抽象类 m=factory.产生上面类对象的抽象方法()
m.同类对象所共通的必需实现的方法
抽象类 n=factory.产生上面类对象的抽象方法()
n.同类对象所共通的必需实现的方法
抽象类 z=factory.产生上面类对象的抽象方法()
z.同类对象所共通的必需实现的方法
![](http://img.blog.csdn.net/20150720211549665?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
普通的工厂 是可以在“产品”的 维度上进行扩展,但如果产品一多,工厂就“泛滥”
抽象工厂在产生新的 “品种” ,改动地方太多,必须要分别在抽象的 产生对应对象集合工厂类 和 抽象类 里加入新的抽象对象
Spring 具体实例化申明对象就直接写在配置文件里了
写法:
自己的 spring 配置文件,不是使用spring框架
在spring.properties文件里写入 VehicleType=com.bjsxt.spring.factory.Car //类对象 配置文件因为在src 目录下,编译后会存到bin目录下,根目录下
接下来在程序里读
Properties props = new Properties();
props.load(Test.class.getClassLoader().getResourceAsStream("com/bjsxt/spring/factory/spring.properties"));
String vehicleTypeName = props.getProperty("VehicleType");
System.out.print(vehicleTypeName);
// 重点来了,把字符串对应的类装载到内存,调用无参数的构造方法 java 反射机制
Object o = Class.forName(vehicleTypeName).newInstance();// 先把类调入内存,然后在用newInstance 方法调用参数为空的构造方法
Movable m = (Movable) o;
m.run();
这里所有的替换就只要替换 配置文件里的内容就好了
spring 框架的写法
配置文件里是<bean id='v' class='类名'>即可
BeanFactory f = new ClassPathXmlApplicationContext("配置文件名。不同于上面的配置文件,这个文件要写在src 目录下");
Object o = f.getBean("v");
Movable m = (Movable) o;
单例模式:静态工厂方法
类Car 在类内部产生产生对象
写法:
private static Car car=new Car(); //从头到尾都只有一个car
private Car(){} // 把构造方法设为空
public static Car getInstance(){
//这里就可以加上限制条件了。。。就没有直接new car 那么方便了
// if(xxxx){ xxxxx new Car()}
return car;
}
多例模式
写法:
private static List<Car> cars=new ArrayList<>(); // 多连接池
类功能可替换的写法:
申明借口,让类实现接口,
具体写法:
接口 m =new 具体类() // 替换就只要替换这个具体类就好
普通工厂模式:
这个时候的 普通 类的构造方法就是public 了
申明工厂类,只有产生(申明)新对象方法
写法:
工厂类 factory = new 工厂类();
接口 m =factory.产生新对象方法();
可替换生产过程的普通工厂模式:
申明 抽象 生产过程的工厂类,里面只有抽象 接口 申明方法
让所有工厂继承这个抽象 生产过程的工厂类
实现接口 申明方法 ,就是产生新的对象
写法:
抽象 生产过程的工厂类 factory = new 具体工厂类()
接口 m=factory.抽象 接口 申明方法();
抽象工厂:系类产品
申明工厂类,在工厂类里写上产生一系列类对象的方法
写法就是 :
工厂类 factory =new 工厂类()
对象类 对象=factory.对应产生类对象的方法()
但是可以整体替换的情况:
声明一些抽象类 里面只有一个抽象方法,就是某些同类对象所共通的必需实现的方法
申明抽象的 产生对应对象集合工厂类,里面只有多个抽象方法,对应产生上面类对象的抽象方法
所有的“同类型”实体类都必须从相同的抽象类继承
所有的 具体工厂类 必须从 抽象的 产生对应对象集合工厂类 继承,并且 具体工厂类的方法就是返回 实例化对应实体类 的方法
写法:
抽象的 产生对应对象集合工厂类 factory =new 具体工厂类() // 整体替换就只要替换这个具体工厂类就好
抽象类 m=factory.产生上面类对象的抽象方法()
m.同类对象所共通的必需实现的方法
抽象类 n=factory.产生上面类对象的抽象方法()
n.同类对象所共通的必需实现的方法
抽象类 z=factory.产生上面类对象的抽象方法()
z.同类对象所共通的必需实现的方法
普通的工厂 是可以在“产品”的 维度上进行扩展,但如果产品一多,工厂就“泛滥”
抽象工厂在产生新的 “品种” ,改动地方太多,必须要分别在抽象的 产生对应对象集合工厂类 和 抽象类 里加入新的抽象对象
Spring 具体实例化申明对象就直接写在配置文件里了
写法:
自己的 spring 配置文件,不是使用spring框架
在spring.properties文件里写入 VehicleType=com.bjsxt.spring.factory.Car //类对象 配置文件因为在src 目录下,编译后会存到bin目录下,根目录下
接下来在程序里读
Properties props = new Properties();
props.load(Test.class.getClassLoader().getResourceAsStream("com/bjsxt/spring/factory/spring.properties"));
String vehicleTypeName = props.getProperty("VehicleType");
System.out.print(vehicleTypeName);
// 重点来了,把字符串对应的类装载到内存,调用无参数的构造方法 java 反射机制
Object o = Class.forName(vehicleTypeName).newInstance();// 先把类调入内存,然后在用newInstance 方法调用参数为空的构造方法
Movable m = (Movable) o;
m.run();
这里所有的替换就只要替换 配置文件里的内容就好了
spring 框架的写法
配置文件里是<bean id='v' class='类名'>即可
BeanFactory f = new ClassPathXmlApplicationContext("配置文件名。不同于上面的配置文件,这个文件要写在src 目录下");
Object o = f.getBean("v");
Movable m = (Movable) o;
相关文章推荐
- [LeetCode][Java] Construct Binary Tree from Preorder and Inorder Traversal
- java之设计模式---工厂方法模式
- spring 访问多个数据源(jdbcUrl写死)
- 常用数制的输入与输出(JAVA)
- Struts2教程--第一章 搭建Struts2开发环境
- spring源码下载
- Eclipse中处理图片引包问题
- myeclipse在破解后JSP页面无法编译
- day05--Java面向对象复习--Java常用类
- [LeetCode][Java] Binary Tree Level Order Traversal II
- "Project facet Java version 1.7 is not supported"的问题解决的办法
- springmvc 入门环境搭建
- 深入理解JAVA虚拟机笔记 - 02
- Java中接口和抽象类的区别?
- java内存泄露
- Java语言基础
- [LeetCode][Java] Binary Tree Zigzag Level Order Traversal
- Java NIO原理图文分析及代码实现
- 如何在Spring加载bean之前设置系统属性
- java继承分析