您的位置:首页 > 其它

设计模式开篇 - 简单工厂模式

2013-03-25 00:57 148 查看
  最近在整理、学习设计模式相关的知识,大部分是些学习笔记或者网络上整理过来的资料,以利于复习、理解之用。

  简单工厂设计模式:

1、接口相关知识复习:

一种特殊的抽象类,方法都是抽象的,属性都是常量
接口的思想:封装隔离-- 对被隔离体的行为的封装或者对被隔离体的职责的封装
使用接口的好处:隔离开外部调用和内部是实现 -- 接口是系统可插拔性的保证
接口和抽象类的选择:
优先选用接口
如果要定义子类的行为又要为子类提供公共功能的时候选择抽象类
面向接口编程是Java编程中的一个重要的原则。


2、在java中非常重要的三层:
View Code

Api.java
package com.xinye.designpattern.simplefactory;
/**
* 接口(提供通用的、抽象的、非具体的功能)
* @author xinye
*
*/
public interface Api {
public void test(String s);
}

Impl.java
package com.xinye.designpattern.simplefactory;
/**
* 具体的接口实现类
* @author 实现类
*
*/
public class Impl implements Api {

@Override
public void test(String s) {
System.out.println("您输入的是:" + s);
}

}

Client.java
package com.xinye.designpattern.simplefactory;
/**
* 客户端类
* @author xinye
*
*/
public class Client {

/**
* @param args
*/
public static void main(String[] args) {
Api api = new Impl();
api.test("我正在学习设计模式");

}

}


问题:客户端需要知道接口和具体的实现类。
由此可见简单工厂模式的主要功能是:不想让客户端知道具体的实现的时候可以使用。

4、解决办法:



代码:

Api.java
package com.xinye.designpattern.simplefactory;
/**
* 接口(提供通用的、抽象的、非具体的功能)
* @author xinye
*
*/
public interface Api {
public void test(String s);
}

ImpA.java
package com.xinye.designpattern.simplefactory;
/**
* 实现类A
* @author xinye
*
*/
public class ImplA implements Api {

@Override
public void test(String s) {
System.out.println("实现类A - 您输入的内容:" + s);
}

}

ImplB.java
package com.xinye.designpattern.simplefactory;
/**
* 实现类B
* @author xinye
*
*/
public class ImplB implements Api {

@Override
public void test(String s) {
System.out.println("实现类B - 您输入的内容:" + s);
}

}

Factory.java
package com.xinye.designpattern.simplefactory;
/**
* 工厂类
* @author xinye
*
*/
public class Factory {
public static Api createApi(int condition){
Api api = null;
if(condition == 1){
api = new ImplA();
}else{
api = new ImplB();
}
return api;
}
}

Client.java
package com.xinye.designpattern.simplefactory;
/**
* 客户端类
* @author xinye
*
*/
public class Client {

/**
* @param args

*/
public static void main(String[] args) {
Api api = Factory.createApi(1);
api.test("工厂类中创建的对象");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: