工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
因此简单工厂模式中就把产品类做为抽象类,有哪些产品就派生多少子类。并且在工厂里写让其通过类型选择生产哪种产品。
让我们看一段代码
abstract class Product{//抽象产品类
public abstract void Produce();//抽象生产方法
}
class Product007 extends Product{//007型产品
public void Produce(){
System.out.println("Product 007");
}
}
class Product100 extends Product{//100型产品
public void Produce (){
System.out.println("Product 100");
}
}
class SimpleFactory {//工厂
Product createProduct(int type) {//生产方法
if(type == 100){
new Product100().Produce();;
} else if(type == 007){
new Product007().Produce();;
}
return null;
}
}
public class Customer{//消费者
public static void main(String[] args) {
SimpleFactory factory = new SimpleFactory();//找到工厂
factory.createProduct(100);//生产100产品
factory.createProduct(007);//生产007产品
}
}
以上就是简单工厂模式,这样消费者和产品就没有直接的关系符合低耦合的要求。但是简单工厂又不好添加新的产品类型,所以又有抽象工厂。
接下来再看下抽象工厂的代码
abstract class Product{//抽象产品类
public abstract void Produce();//抽象生产方法
}
class Product007 extends Product{//007型产品
public void Produce(){
System.out.println("Product 007");
}
}
class Product100 extends Product{//100型产品
public void Produce (){
System.out.println("Product 100");
}
}
abstract class Factory {//抽象工厂
abstract void createProduct();
}
class Factory007 extends Factory {//007工厂
public void createProduct(){//生产007产品
new Product007().Produce();
}
}
class Factory100 extends Factory {//100工厂
public void createProduct(){//生产100产品
new Product100().Produce();
}
}
public class Customer{//消费者
public static void main(String[] args) {
Factory100 factory100 = new Factory100();//找到100工厂
factory100.createProduct();
Factory007 factory007= new Factory007();//找到007工厂
factory007.createProduct();
}
}
到了抽象工厂我们就可以很方便的修改生产的产品类型了。
但是面对产品类型非常庞大时,并不建议这样做。