比如,由于某种情况,你要控制类对象的个数,只能产生1个对象,而用构造器可能会产生很对对象,这样就不符合实际情况了。可以选择静态工厂模式. public class Factory { private static int count=0; private Factory(){} public static Factory getFactory(){ if(count<1)return new Factory(); return null; } }这样你就只能通过Factory 的getFactory方法得到唯一实例了。
你说的就是《研磨设计模式》中的简单工厂模式,它不是Gof的23个模式,但是很常用,大致的写法如下: 简单工厂示例代码 (1)先看看Api的定义,示例代码如下:1./** 2. * 接口的定义,该接口可以通过简单工厂来创建 3. */ 4.public interface Api { 5. /** 6. * 示意,具体的功能方法的定义 7. * @param s 示意,需要的参数 8. */ 9. public void operation(String s); 10.} (2)定义了接口,该来实现它了,ImplA的示例代码如下:1./** 2. * 接口的具体实现对象A 3. */ 4.public class ImplA implements Api{ 5. public void operation(String s) { 6. //实现功能的代码,示意一下 7. System.out.println("ImplA s=="+s); 8. } 9.} ImplB的示意实现和ImplA基本一样,示例代码如下:1./** 2. * 接口的具体实现对象B 3. */ 4.public class ImplB implements Api{ 5. public void operation(String s) { 6. //实现功能的代码,示意一下 7. System.out.println("ImplB s=="+s); 8. } 9.} (3)该来看看简单工厂的实现,示例代码如下: 1./** 2. * 工厂类,用来创造Api对象 3. */ 4.public class Factory { 5. /** 6. * 具体的创造Api对象的方法 7. * @param condition 示意,从外部传入的选择条件 8. * @return 创造好的Api对象 9. */ 10. public static Api createApi(int condition){ 11. //应该根据某些条件去选择究竟创建哪一个具体的实现对象, 12. //这些条件可以从外部传入,也可以从其它途径获取。 13. //如果只有一个实现,可以省略条件,因为没有选择的必要。 14. 15. //示意使用条件 16. Api api = null; 17. if(condition == 1){ 18. api = new ImplA(); 19. }else if(condition == 2){ 20. api = new ImplB(); 21. } 22. return api; 23. } 24.} (4)再来看看客户端的示意,示例代码如下: 1./** 2. * 客户端,使用Api接口 3. */ 4.public class Client { 5. public static void main(String[] args) { 6. //通过简单工厂来获取接口对象 7. Api api = Factory.createApi(1); 8. api.operation("正在使用简单工厂"); 9. } 10.} 转抄自《研磨设计模式》,好书啊,更详细的,还是看书去理解吧
public class Factory {
private static int count=0;
private Factory(){}
public static Factory getFactory(){
if(count<1)return new Factory();
return null;
}
}这样你就只能通过Factory 的getFactory方法得到唯一实例了。
简单工厂示例代码
(1)先看看Api的定义,示例代码如下:1./**
2. * 接口的定义,该接口可以通过简单工厂来创建
3. */
4.public interface Api {
5. /**
6. * 示意,具体的功能方法的定义
7. * @param s 示意,需要的参数
8. */
9. public void operation(String s);
10.}
(2)定义了接口,该来实现它了,ImplA的示例代码如下:1./**
2. * 接口的具体实现对象A
3. */
4.public class ImplA implements Api{
5. public void operation(String s) {
6. //实现功能的代码,示意一下
7. System.out.println("ImplA s=="+s);
8. }
9.}
ImplB的示意实现和ImplA基本一样,示例代码如下:1./**
2. * 接口的具体实现对象B
3. */
4.public class ImplB implements Api{
5. public void operation(String s) {
6. //实现功能的代码,示意一下
7. System.out.println("ImplB s=="+s);
8. }
9.}
(3)该来看看简单工厂的实现,示例代码如下:
1./**
2. * 工厂类,用来创造Api对象
3. */
4.public class Factory {
5. /**
6. * 具体的创造Api对象的方法
7. * @param condition 示意,从外部传入的选择条件
8. * @return 创造好的Api对象
9. */
10. public static Api createApi(int condition){
11. //应该根据某些条件去选择究竟创建哪一个具体的实现对象,
12. //这些条件可以从外部传入,也可以从其它途径获取。
13. //如果只有一个实现,可以省略条件,因为没有选择的必要。
14.
15. //示意使用条件
16. Api api = null;
17. if(condition == 1){
18. api = new ImplA();
19. }else if(condition == 2){
20. api = new ImplB();
21. }
22. return api;
23. }
24.}
(4)再来看看客户端的示意,示例代码如下:
1./**
2. * 客户端,使用Api接口
3. */
4.public class Client {
5. public static void main(String[] args) {
6. //通过简单工厂来获取接口对象
7. Api api = Factory.createApi(1);
8. api.operation("正在使用简单工厂");
9. }
10.} 转抄自《研磨设计模式》,好书啊,更详细的,还是看书去理解吧