工厂模式个人写个小例子进行总结
2017-05-04 16:40
176 查看
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A()工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。这里面举一个恰当的小例子:需求是这样的,你有一个商店,商店里面有三种卖东西的方式,根据的总钱数和传递进来卖东西的方式来确定最后结账需要付钱的总数。如果是平时的话,我们在一个类里面写一大堆的方法来弄,但是如果要用工厂模式呢,我们要怎么办呢?第一步:建立一个工厂类,这个类里面只有一个静态方法,这个方法就是我们卖货物的售卖方式,并且当我们调用这个方法的时候会往方法里面传递一个售卖货物的的方式。如下面代码所示:
public class SaleFactory { public static SaleBehavior create(int which){ switch (which) { case Store.DISCOUNT_5: return new SaleHalf(); case DISCOUNT_8: return new SaleEight(); case DISCOUNT_FULL: return new SaleFull(); default: return new SaleDefault(); } } }
第二步:建立四个售卖货物的方法,这四个方法要分开建立到不同的类,
但是这四个法唯一的不同就是数据算法的不同,所以呢让他们都实现了卖东西的接口
public interface SaleBehavior { float sale(float money); }当这四个方法实现了这个接口的时候都会复写sale的方法,根据自己卖东西的特点,在这里面进行具体问题具体分析,。比如半价出售的可以这么写
public class SaleHalf implements SaleBehavior { @Override public float sale (float money) { return money * 0.5f; } }
第三步:在商店类里面进行归总,首先卖东西是要有卖东西的对象的,并且这里面要把金钱的总钱数算清楚,如下面代码所示
public class Store { public static final int DISCOUNT_5 = 1; public static final int DISCOUNT_8 = 2; public static final int DISCOUNT_FULL = 3; private SaleBehavior mBehavior; public float sell (int count, float price) { float money = count * price; if (mBehavior == null) return money; return mBehavior.sale(money); } public void setBehavior (SaleBehavior behavior) { mBehavior = behavior; } }
第四步:当我们要用到这个类的时候,我们就可以用下面的方式进行实现了
Store store = new Store();
store.setBehavior(new SaleFull());
float money = store.sell(3, 200);
这里面是new出来一个商店类,给商店类加一个打折的方式,然后把钱 和商品的数量输入进去就可以了,,
通过工厂模式写出来的代码必要多,但是后期的维护很容易,不用 改主体
相关文章推荐
- 怎样开始用selenium进行自动化测试(个人总结) 测试工具 java
- 关于对DataTable进行操作的几个例子总结
- JAVA版 微信企业号开发 个人总结(微信网页授权例子,微信企业号精准定位,误差5-10米)
- 对Linux系统进行配置应该养成做备份的习惯--个人总结
- 个人总结如何学习新知识与对知识技术进行深入理解的方法
- JTA 个人总结Code例子
- SQL进行排序、分组、统计的10个新技巧(个人总结)-------Mondify By LiFuyun
- 2018/3/4-3/6个人android客户端和服务器通信学习总结--主要是网上聊天局域网通信例子及环境搭配遇到的问题
- 怎样开始用selenium进行自动化测试(个人总结)
- wpf中使用MVVM模式进行开发,View与ViewModule的交互个人总结
- VMWare下进行Embedded Linux配置流程——个人学习总结!
- Zxing图片识别 从相册选取二维码图片进行解析总结
- 宝马各系的特点 个人总结
- vue.js组件的个人总结
- 个人多线程程序设计经验总结
- 利用存储过程进行高效分页的例子
- 关于使用kafka的个人总结
- 一个Java小例子(通过Radio进行选中查询)
- 有关library导入的个人总结和反思
- 笔试选择题总结3(个人总结)