java设计模式-(一)工厂模式
简单工厂模式
一个专门用来创建其他类的模式,也叫做静态工厂模式,因为这种方式的获取方法都是静态的,使用时候无需new处对象。
public interface Animal {
void sound();
}
这里定义一个Animal接口来实现animal的基本方法。
public class Pig implements Animal{ //实现animal接口
@Override
public void sound() {
System.out.print("Hi,I am a Pig From Factory");
}
}
public class Dog implements Animal {
@Override
public void sound() {
System.out.print("Hi,I am a Dog From Factory");
}
}
这里实现了Animal接口
public class AnimalFactory {
public Animal getAnimal(String name){
if(name.equals("pig")){
return new Pig();
}
else if(name.equals("dog")){
return new Dog();
}
return null;
}
}
这里通过AnimalFactory 根据不同的字段进行返回不同的类。
这里一旦通过输入的字符串进行查询,如果输入的字符串错误则会出现返回空的情况,同时不利于维护,一旦有新的类加入,就需要对工厂类进行修改,但是其将类的创建和工作分开,提高了系统的灵活性。而且使用这种方式无法创造出基于继承的结构。
抽象工厂方法模式
将工厂分开的方式,一个工厂专门的生产一种类,上面的工厂如果添加了产品,需要对工厂进行修改,这里通过实现具体的类和工厂的方法,如果需要具体的类直接就可以添加具体的类和工厂。
public interface Animal {
void sound();
}
public interface Factory {
Animal created();
}
定义两个接口,animal和factory
public class DogFactory implements Factory{
@Override
public Animal created() {
return new Dog();
}
}
public class PigFactor implements Factory {
@Override
public Animal created() {
return new Pig();
}
}
两个工厂
测试代码
public void test(){
Factory factory=null;
factory=new DogFactory();
factory.created().sound();
factory=new PigFactor();
factory.created().sound();
}
这种方式将工厂和具体的产品进行了整合,这也避免了错误 的发生,同时对于需要添加的功能可以直接通过编写具体的类实现,但是过于繁杂,每一次的添加都需要添加产品和工厂类。