工厂类理论复习
2015-12-07 17:16
169 查看
设计模式的东西,其实工作中也用的很多,但是自己都不知道用了哪些,所以自己去网上找了些资料学习下,写个自己容易理解的笔记来方便自己复习。
这里的文章感觉还不错,说的比较好 http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
然后我就看了,再然后我就自己动手来了一次,加入了自己的模拟情况,至少自己更好理解了
第一、工厂模式
模拟环境:系统运行的时候,客户要初始话部分产品的数据,但是不确定要初始化那行产品的数据。
1。普通工厂模式。
对应情况:只需要初始产品“Bmw”或者“Ad”
类说明:产品抽象类Car,具体产品类AD,具体产品类Bmw,工厂类Driver,程序测试类SimpleFactory
产品抽象类Car
具体产品类Bmw
工厂类Driver
程序测试类SimpleFactory
[b]2。多工厂模式。[/b]
对应情况:在上边程序写好后,出现了一个问题。新来的维护小弟经常会写错工厂类的带入代码。那么如何才能防止维护小弟,以及以后的维护的小弟的小弟写错带入代码呢。
类说明:其他类不变,优化工厂类Driver
优化工厂类Driver
程序测试类SimpleFactory
[b][b]3。[b]静态工厂方法模式[/b][/b][/b]
对应情况:小弟那里没问题了,然后老大来看了看代码说“还能精简”。小猿一听“精简个毛啊,需求变动下,现在的精简就成毛了”心里想想而已,现实肯定是点头哈腰双手拇指伸出外加一脸崇拜的说“不愧是老大,我立马精简”。心里再想想精简一个地方,意思意思就行了。
类说明:其他类不变,静态优化工厂类Driver方法
静态优化工厂类Driver
程序测试类SimpleFactory
[b][b]3。[b][b]抽象工厂模式[/b][/b][/b][/b]
对应情况:老大最近表示,项目做的不错,客户现在要求增加产品意味着要多给公司钱(怎么不见给涨个工资呢,郁闷下),但是公司决定准备给小猿一个更有挑战的项目,为了能继续让客户掏钱,现要求小猿在接受新项目的同时,也要偶尔管管这个项目,给小猿招几个实习生来。然后一切为了让实习生在开发的过程中不会影响到原先的工厂,不需要小猿花太多时间回来处理问题。。。
类说明:其他类不变,抽象工厂类DriverInterface,具体工厂类DriverAd,具体工厂类DriverBmw
抽象工厂类DriverInterface
具体工厂类DriverAd
具体工厂类DriverBmw
程序测试类SimpleFactory
然后小猿又开始愉快地、兴奋地投入到了下一个项目的开发中,要是还觉得看不懂,这里还有一个简单的 http://blog.sina.com.cn/s/blog_7042a6c1010141h8.html
这里的文章感觉还不错,说的比较好 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(); } }
[b]2。多工厂模式。[/b]
对应情况:在上边程序写好后,出现了一个问题。新来的维护小弟经常会写错工厂类的带入代码。那么如何才能防止维护小弟,以及以后的维护的小弟的小弟写错带入代码呢。
类说明:其他类不变,优化工厂类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(); } }
[b][b]3。[b]静态工厂方法模式[/b][/b][/b]
对应情况:小弟那里没问题了,然后老大来看了看代码说“还能精简”。小猿一听“精简个毛啊,需求变动下,现在的精简就成毛了”心里想想而已,现实肯定是点头哈腰双手拇指伸出外加一脸崇拜的说“不愧是老大,我立马精简”。心里再想想精简一个地方,意思意思就行了。
类说明:其他类不变,静态优化工厂类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(); } }
[b][b]3。[b][b]抽象工厂模式[/b][/b][/b][/b]
对应情况:老大最近表示,项目做的不错,客户现在要求增加产品意味着要多给公司钱(怎么不见给涨个工资呢,郁闷下),但是公司决定准备给小猿一个更有挑战的项目,为了能继续让客户掏钱,现要求小猿在接受新项目的同时,也要偶尔管管这个项目,给小猿招几个实习生来。然后一切为了让实习生在开发的过程中不会影响到原先的工厂,不需要小猿花太多时间回来处理问题。。。
类说明:其他类不变,抽象工厂类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
相关文章推荐
- 磁盘,卷,分区和驱动器的关系 基本磁盘-动态磁盘-GPT磁盘-MBR磁盘-RAID阵列磁盘的区别 资料整理
- Android fragment 重叠问题——通过hide,show方式导致的解决方法
- MongoDB操作数据库的几个命令(自己用)
- 01_jeecms建站
- 第14周项目2-二叉树排序树中查找的路径
- 第十四周项目4-二叉排序树查找的路径
- 第16周项目4英文单词排序
- hibernate手写sql时获取日期差的操作
- PHP开发移动客户端接口---封装接口
- 为什么要在<button>元素中添加type属性
- 【JMeter】Jmeter引入第三方jar包
- javascript中闭包函数的作用
- 第十五周项目(2):用哈希法组织关键字2——用链地址法处理冲突
- 第十五周 项目1-验证算法(2)
- Java Web学习笔记——Servlet
- 对用户密码进行加盐处理
- Java中ListIterator和Iterator详解与辨析
- 《计算机技术领域当前的主流技术及其社会需求调查报告》
- ListView性能优化+异步加载图片
- 第十五周--项目二--用哈希法组织关键字(2)