设计模式-简单工厂

某天,小明想买车了,高高兴兴的去4S店买车,车辆的种类很多,小明就很迷糊,不知道买哪个品牌的汽车,好苦恼啊。 这时就需要4S工作人员来介绍各种车辆的信息了。

代码:(不使用工厂模式,实现4S工作人员)

public class Salesman {
	
	 public static void main(String arg[]){
		 System.out.println("你好, 需要我介绍什么车辆呢?");
		 Scanner sc= new Scanner(System.in);
		 String carname = sc.next();
		 if(carname.equals("奔驰") ){
			 Benz benz = new Benz();
			 benz.introduce();
		 }else if(carname.equals("宝马")){
			 Bmw bmw = new Bmw();
			 bmw.introduce();
		 }
	 }
	 

}

class Benz{
	public void introduce(){
		System.out.println("奔驰好啊,奔驰棒");
	}
		 
}

 class Bmw{
	public void introduce(){
		System.out.println("宝马那是好的很哦");
	}
		 
}

没有使用工程模式时,所以车类都是在Salesman 类中的main方法中去实例化,main方法相当于前端,那么就造成了前端与多个车类高度耦合的情况,前端需要去知道所以的车类,增加一个车类,就需要更改前端代码。这个就如同,我作为4S点的员工,我要知道每种车是如何生产(new)出来的。

代码:(使用工程模式,实现4S工作人员)

//车类接口
public interface Car {
	 public void introduce();

}


public class Benz implements Car{

	@Override
	public void introduce() {
		// TODO Auto-generated method stub
		System.out.println("我是奔驰");
		
	}

}

public class Bmw implements Car{

	@Override
	public void introduce() {
		// TODO Auto-generated method stub
		System.out.println("我是宝马");

	}

}

//车类工厂
public class CarFactory {
	
	public Car getCar(String carName){
		 if(carName.equals("奔驰") ){
			 return new Benz();
		 }else if(carName.equals("宝马")){
			 return new Bmw();
		 }
		return null;
	}

}

//4S店工作人员
public class Salesman {
	
	 public static void main(String arg[]){
		 System.out.println("你好, 需要我介绍什么车辆呢?");
		 Scanner sc= new Scanner(System.in);
		 String carname = sc.next();
		 CarFactory carFactory=new CarFactory();
		 Car car=carFactory.getCar(carname);
		 car.introduce();
		 }
}

使用工程模式,前端与车类就解耦了,前端不用去知道所以车类,只需要知道车类工厂,增加新车类,也不用去更改前端代码,只需增加车类和改工厂类(利用java反射机制,可以优化工厂类)。现在,就如同我作为4S员工,我知道这个车类工厂建立了(new),我只需要从工厂中,获取到每种车类,我不需要去关心,这个车类是如何生产的(new)。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值