java设计模式详解--工厂模式
2016-09-26 17:17
375 查看
java设计模式详解–工厂模式
1.工厂方法模式
在说工厂模式之前先来了解一下设计模式中的一个原则–开闭原则。遵循开闭原则设计出的模块具有两个主要特征:(以下2个特征出自百度百科)(1)对于扩展是开放的(Open for extension)。这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。(2)对于修改是关闭的(Closed for modification)。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。说白了就是对修改功能关闭,对扩展功能开放。下面举一个具体的例子(生产水果的例子),代码如下://生产水果接口 public interface Fruit { void produceFruit(); }““//生产苹果public class Apple implements Fruit {@Overridepublic void produceFruit() {System.out.println(“my name is apple!”);}}//生产橘子public class Orange implements Fruit {@Overridepublic void produceFruit() {System.out.println(“my name is orange!”);}}//工厂类public class FruitFactory {public Fruit produceApple(){return new Apple();}public Fruit produceOrange(){return new Orange();}}//测试类public class FactoryDemo {public static void main(String[] args) {FruitFactory fruitFactory = new FruitFactory();Fruit fruit = fruitFactory.produceApple();fruit.produceFruit();}}““输出结果如下:现在由于需求变更,添加生产香蕉的功能。我们改如何实现?简单的方法就是添加一个香蕉的class, 然后在工厂类中添加生产香蕉的方法就ok了!这样是可以完成我们生产香蕉的需求,但是为了我们一开始说的开闭原则,我们修改了工厂类。修改代码如下:““//香蕉public class Banana implements Fruit {@Overridepublic void produceFruit() {System.out.println(“my name is banana!”);}}//修改后的工厂类public class FruitFactory {public Fruit produceApple(){return new Apple();}public Fruit produceOrange(){return new Orange();}public Fruit produceBanana(){return new Orange();}}““添加的Banana class属于对扩展开放,但是修改的工厂类违反了对修改关闭的原则。所以我们需要重新设计我们的工厂模式,可以满足开闭原则。既然修改工厂类违反了开闭原则,那么我们新加工能时就应该避开修改工厂类,所以我们考虑使用多个工厂类来实现,当我们添加新功能时只需添加新的工厂类即可。具体代码如下:实体类沿用上面的即可,将工程类拆分为多个。““//apple factorypublic class AppleFactory {public Fruit produceApple(){return new Apple();}}““““//orange factorypublic class OrangeFactory {public Fruit produceOrange(){return new Orange();}}//banana factorypublic class BananaFactory {public Fruit produceBanana(){return new Banana();}}““这样就满足了我们添加新工能不修改原有代码,只需添加相应的工程类和水果类即可。当然,这是一个很简单的工厂模式的例子,还可以设计出更好的工厂模式。有不对的地方大家可以留言一起交流。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序