一 工厂模式
1 工厂模式属于创建型模式,指的是不暴露给客户端创建对象逻辑,用一个共同的接口指向创建的对象。定义一个创建对象的接口,让子类决定实例化哪一个工厂类。适用于复杂系统
2 优点:调用者想创建对象只需要知道名称就行;扩展性高:如果想增加一个产品只需要一个工厂类;不用关心内部实现,只需要关心产品的接口
3 缺点: 每增加一个产品就需要增加一个具体类和工厂实现,过多会使系统变得复杂,也增加系统具体类的依赖
4适用场景:
日志记录器:记录可能会记录到本地磁盘,远程服务器,系统事件,用户可以选择记录到什么地方去
数据库访问:用户不知道采用哪一类数据库时候,以及数据库可能会变化时
设计一个连接服务器的框架:需要三个协议,http,pop3,rpc等协议,可将三者作为一个产品类,共同实现一个接口。
代码样例:
//定义抽象接口
public inteface Animal{
void eat();
}
//定义三个具体的产品类来实现Animal接口
public Dog implements Animal{
public void eat(){
System.out.println("Dog is eatting");
}
}
public Pig implements Animal{
public void eat(){
System.out.println("Pig is eatting");
}
}
public Fish implements Animal{
public void eat(){
System.out.println("Fish is eatting");
}
}
//定义工厂类提供创建对象的接口
public class AnimalFactory{
public Animal getAnimal(String type){
if(type==null){
return null;
}
if(type.equals("Dog")){
return new Dog();
}else if(type.equals("Pig")){
return new Pig();
}else if(type.equals("Fish")){
return new Fish();
}
}
}
//执行查看工厂类的正误
public class FactoryDemo{
public static void main(String args[]){
AnimalFactory af = new AnimalFactory();
af.getAnimal("Dog");
af.getAnimal("Pig");
af.getAnimal("Fish");
}
}