工厂模式

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 

因此简单工厂模式中就把产品类做为抽象类,有哪些产品就派生多少子类。并且在工厂里写让其通过类型选择生产哪种产品。

让我们看一段代码


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();
	}
}


到了抽象工厂我们就可以很方便的修改生产的产品类型了。

 但是面对产品类型非常庞大时,并不建议这样做。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值