工厂类理论复习

设计模式的东西,其实工作中也用的很多,但是自己都不知道用了哪些,所以自己去网上找了些资料学习下,写个自己容易理解的笔记来方便自己复习。

这里的文章感觉还不错,说的比较好 http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html

然后我就看了,再然后我就自己动手来了一次,加入了自己的模拟情况,至少自己更好理解了

第一、工厂模式

模拟环境:系统运行的时候,客户要初始话部分产品的数据,但是不确定要初始化那行产品的数据。

1。普通工厂模式。

对应情况:只需要初始产品“Bmw”或者“Ad”

类说明:产品抽象类Car,具体产品类AD,具体产品类Bmw,工厂类Driver,程序测试类SimpleFactory

产品抽象类Car


/**
 * 抽象产品类
 * @author Administrator
 *
 */
public interface Car {
	/**
	 * 定义了一个汽车产品的初始化方法,然后大家可以愉快地继承了-。-
	 */
	public void Driver();
}

具体产品类AD

import com.util.o;
/**
 * 具体产品类AD
 * @author Administrator
 *
 */
public class Ad implements Car {

	@Override
	public void Driver() {
		System.out.println("AD开始初始化");
	}


}

具体产品类Bmw
/**
 * 具体产品类BMW
 * @author Administrator
 *
 */
public class Bmw implements Car {

	@Override
	public void Driver() {
		System.out.println("BMW开始初始化");
	}


}

工厂类Driver


/**
 * 工厂类
 * @author Administrator
 *
 */
public class Driver {

	public Car driverCar(String car) {
		if ("bmw".equals(car)) {
			return new Bmw();
		}else if("ad".equals(car)){
			return new Ad();
		}else{
			System.out.println("无效字符");
			return null;
		}

	}
}

程序测试类SimpleFactory

/**
 * 程序测试
 * @author Administrator
 *
 */
public class SimpleFactory {

	/**启动程序,执行想要的产品初始化
	 * @param args
	 */
	public static void main(String[] args) {
		Driver driver = new Driver();
		Car car = driver.driverCar("bmw");
		car.Driver();
	}

}

2。多工厂模式。


对应情况:在上边程序写好后,出现了一个问题。新来的维护小弟经常会写错工厂类的带入代码。那么如何才能防止维护小弟,以及以后的维护的小弟的小弟写错带入代码呢。

类说明:其他类不变,优化工厂类Driver

优化工厂类Driver

/**
 * 工厂类
 * @author Administrator
 *
 */
public class Driver {

	/**
	 * 多工厂模式的优化Bmw
	 * @return
	 */
	public Car getBmw() {
		return new Bmw();
	}
	
	/**
	 * 多工厂模式的优化Ad
	 * @return
	 */
	public Car getAd() {
		return new Ad();
	}
	
	/**
	 * 这是普通工厂类的调用模式
	 * @param car 代码
	 * @return
	 */
	public Car driverCar(String car) {
		if ("bmw".equals(car)) {
			return new Bmw();
		}else if("ad".equals(car)){
			return new Ad();
		}else{
			System.out.println("无效字符");
			return null;
		}

	}
}

程序测试类SimpleFactory

/**
 * 程序测试
 * @author Administrator
 *
 */
public class SimpleFactory {

	/**启动程序,执行想要的产品初始化
	 * @param args
	 */
	public static void main(String[] args) {
//		simpleTest();//普通工厂模式测试
		
		Driver driver = new Driver();
		Car car = driver.getBmw();//这样新来的小弟就不会写作带入代码了
		car.Driver();
	}

	public static void simpleTest() {
		Driver driver = new Driver();
		Car car = driver.driverCar("bmw");
		car.Driver();
	}

}

3。静态工厂方法模式

对应情况:小弟那里没问题了,然后老大来看了看代码说“还能精简”。小猿一听“精简个毛啊,需求变动下,现在的精简就成毛了”心里想想而已,现实肯定是点头哈腰双手拇指伸出外加一脸崇拜的说“不愧是老大,我立马精简”。心里再想想精简一个地方,意思意思就行了。

类说明:其他类不变,静态优化工厂类Driver方法

静态优化工厂类Driver

/**
 * 工厂类
 * @author Administrator
 *
 */
public class Driver {

	/**
	 * 多工厂模式的优化Bmw
	 * 静态化方法
	 * @return
	 */
	public static Car getBmw() {
		return new Bmw();
	}
	
	/**
	 * 多工厂模式的优化Ad
	 * 静态化方法
	 * @return
	 */
	public static Car getAd() {
		return new Ad();
	}
	
	/**
	 * 这是普通工厂类的调用模式
	 * @param car 代码
	 * @return
	 */
	public Car driverCar(String car) {
		if ("bmw".equals(car)) {
			return new Bmw();
		}else if("ad".equals(car)){
			return new Ad();
		}else{
			System.out.println("无效字符");
			return null;
		}

	}
}

程序测试类SimpleFactory

/**
 * 程序测试
 * @author Administrator
 *
 */
public class SimpleFactory {

	/**启动程序,执行想要的产品初始化
	 * @param args
	 */
	public static void main(String[] args) {
//		simpleTest();//普通工厂模式测试
		
//		Driver driver = new Driver();//静态话以后,就不用新建实体了
		Car car = Driver.getBmw();//这样新来的小弟就不会写作带入代码了
		car.Driver();
	}

	public static void simpleTest() {
		Driver driver = new Driver();
		Car car = driver.driverCar("bmw");
		car.Driver();
	}

}

3。抽象工厂模式

对应情况:老大最近表示,项目做的不错,客户现在要求增加产品意味着要多给公司钱(怎么不见给涨个工资呢,郁闷下),但是公司决定准备给小猿一个更有挑战的项目,为了能继续让客户掏钱,现要求小猿在接受新项目的同时,也要偶尔管管这个项目,给小猿招几个实习生来。然后一切为了让实习生在开发的过程中不会影响到原先的工厂,不需要小猿花太多时间回来处理问题。。。

类说明:其他类不变,抽象工厂类DriverInterface,具体工厂类DriverAd,具体工厂类DriverBmw

抽象工厂类DriverInterface

/**
 * 抽象工厂类
 * @author Administrator
 *
 */
public interface DriverInterface {
	/**
	 * 获取服务
	 * @return
	 */
	public Car getCar();
}

具体工厂类DriverAd

/**
 * 具体工厂类DriverAd,针对AD
 * @author Administrator
 *
 */
public class DriverAd implements DriverInterface {

	@Override
	public Car getCar() {
		return new Ad();
	}

}


具体工厂类DriverBmw

/**
 * 具体工厂类DriverBmw,针对Bmw
 * @author Administrator
 *
 */
public class DriverBmw implements DriverInterface {

	@Override
	public Car getCar() {
		return new Bmw();
	}

}

程序测试类SimpleFactory

/**
 * 程序测试
 * @author Administrator
 *
 */
public class SimpleFactory {

	/**启动程序,执行想要的产品初始化
	 * @param args
	 */
	public static void main(String[] args) {
//		simpleTest();//普通工厂模式测试
		
//		StaticFactory();//静态工厂测试
		
		DriverInterface driver = new DriverBmw();
		Car car = driver.getCar();
		car.Driver();
	}

	public static void StaticFactory() {
		//		Driver driver = new Driver();//静态话以后,就不用新建实体了
				Car car = Driver.getBmw();//这样新来的小弟就不会写作带入代码了
				car.Driver();
	}

	public static void simpleTest() {
		Driver driver = new Driver();
		Car car = driver.driverCar("bmw");
		car.Driver();
	}

}

然后小猿又开始愉快地、兴奋地投入到了下一个项目的开发中,要是还觉得看不懂,这里还有一个简单的 http://blog.sina.com.cn/s/blog_7042a6c1010141h8.html


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值