一个都不能少之设计模式1简单工厂模式
简单工程模式
提供接口的工厂(利用了接口的多态,对象的上传型)。
那么什么是接口呢?在Java中接口是一种特殊的抽象类,跟一般的抽象类相比,接口里面的所有方法都是抽象
方法,接口里面的所有属性都是常量。即static final类型。接口通常用来定义实现类的外观,也就是实现类
的行为定义,用来约束实现类的行为。可以看作是Facade。接口就相当于一份契约,根据外部应用需要的功能
,约定了实现类应该要实现的功能,但是具体的实现除了实现接口约定的功能外,还可以根据需要实现其他一
些功能,这也是允许的。
interface
package guan;
public interface Api {
public String function(String str);
}
package guan;
public class ImplA implements Api {
@Override
public String function(String str) {
return ("执行A方法输出:"+str);
}
}
package guan;
public class ImplB implements Api {
@Override
public String function(String str) {
return ("执行B方法输出:"+str);
}
}
package guan;
public class Factory {
public static Api getApi(int condition)
{
Api api=null;
if(condition==1)
return new ImplA();
else if(condition==2)
return new ImplB();
else return null;
}
}
package guan;
public class Client {
public static void main(String[] args) {
Api api=Factory.getApi(1);
System.out.println(api.function("我是Api"));
}
}
输出结果:执行A方法输出:我是Api
简单工厂:提供一个创建对象实例的功能,而无需关心其具体实现。被创建实例的类型可以是借口、抽象类,
也可以是具体的类。
解决问题描述:在Java编程中,出现只知接口而不知实现。或者说只知道有这么回事,但具体的实现等细节“
封装隔离”,那么该怎么跳过和具体实现的耦合,这时创建一个专门做这类工作的工厂Factory就可以了。
此时工厂的作用:根据Client的参数(比如参数,配置文件,动态变量等)选择合适的Class,Implement,并
返回给Client。
合适选用工厂模式呢?1、如果要完全封装隔离具体实现,让外部只能通过接口来操作封装体,那么可以选用
简单工厂,让客户端通过工厂来获取相应的接口,而无须关心具体的实现。2、如果想要把对创建对象的职责
集中管理和控制,可以选用简单工厂,一个简单工厂可以创建很多的、不相关的对象,可以把对外创建对象的
职责集中到一个简单工厂来,从而实现对象的集中管理和控制。