工厂分为简单工厂,工厂方法模式,抽象工厂模式
其中简单工厂并不属于23种设计模式之一。
0、简单工厂:简单工厂的扩展比较麻烦,必须要去修改既存的一些代码,这样并不符合设计模式的开闭原则。
代码如下:
public interface Animal {
public void show();
}
public class AnimalFactory {
public Animal creat(String type){
if(type.equals("dog"))return new Dog();
else if(type.equals("sheep"))return new Sheep();
else return null;
}
}
public class Dog implements Animal {
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("dog........");
}
}
public class Sheep implements Animal {
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("sheep........");
}
}
1、工厂方法模式:易于扩展新的产品类,新建一个产品类以及对应的工厂类即可,不需要去修改原有的逻辑。
代码如下:
对于dog类、sheep类和Animal同上面的简单工厂,简单工厂中的AnimalFactory类舍去,新加AnimalProvider。
public interface AnimalProvider {
public Animal creat();
}
public class DogFactory implements AnimalProvider {
@Override
public Animal creat() {
// TODO Auto-generated method stub
return new Dog();
}
}
public class SheepFactory implements AnimalProvider {
@Override
public Animal creat() {
// TODO Auto-generated method stub
return new Sheep();
}
}
2、抽象工厂模式:这种模式的工厂类创建的是一系列的产品,比如下图的DogFactory,它可以创建一系列的小狗。
代码如下:
public interface Wild {
public void show();
}
public class WildDog implements Wild {
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("Wilddog........");
}
}
public class WildSheep implements Wild {
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("WildSheep........");
}
}
public interface Poultry {
public void show();
}
public class PoultryDog implements Poultry {
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("PoultryDog........");
}
}
public class PoultrySheep implements Poultry{
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("PoultrySheep........");
}
}
public interface AnimalFactory1 {
public Wild creatWild();
public Poultry creatPoultry();
}
public class DogFactory1 implements AnimalFactory1 {
@Override
public Wild creatWild() {
// TODO Auto-generated method stub
return new WildDog();
}
@Override
public Poultry creatPoultry() {
// TODO Auto-generated method stub
return new PoultryDog();
}
}
public class SheepFactory1 implements AnimalFactory1 {
@Override
public Wild creatWild() {
// TODO Auto-generated method stub
return new WildSheep();
}
@Override
public Poultry creatPoultry() {
// TODO Auto-generated method stub
return new PoultrySheep();
}
}
抽象工厂与工厂方法的区别:
抽象工厂的具体工厂类可以创建一系列的产品,而工厂方法的具体工厂类只能创建一个。