码迷,mamicode.com
首页 > 其他好文 > 详细

[大话设计模式]学习笔记——简单工厂模式

时间:2016-04-05 19:45:12      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

说好的每天进步一点点的,结果工作太忙,一直在加班,都没有学习新东西。我还要进BAT呢。
坚持每天学习新东西。
写代码时,意识到在代码结构上还是有点欠缺。赶紧补上。
纪录对设计模式的认识。小菜变大鸟。进攻BAT。

应用场景:

编写一个计算器控制台程序,要求输入两个数和运算符号,得到结果。
这本书使用C#写的。已有博主用JAVA写出来,参考:http://blog.csdn.net/ghsau/article/details/8163418

常见的做法:

写一个方法封装计算机的功能,我们只需传参调用此方法就OK。
public static double getResult(double numA, double numB, String operate)
 
分析:
体现了面向对象的封装
这样要增加计算器的功能就需要改此方法。再者,编译时,其他方法也需要参与进来。代码耦合性太高。
最好的做法应该将加减乘除各种运算分离开来。

使用简单工厂设计模式的做法:

1.创建抽象运算类,定义公共的成员变量,和getResult()抽象方法。
2.创建加,减,乘,除具体的类继承抽象运算类,实现getResult()方法
分析:
表现出面向对象的继承
如果需要添加运算,只需要创建一个新的类继承运算类
问题来了,我们怎么知道什么时候该创建哪个类的对象呢?
这时,就需要一个单独的类来管理这些具体的运算类。这个类就体现简单工厂设计模式。也用到了多态
    public class OperationFactory {  
      
        public static Operation createOperation(String operate) {  
            Operation op = null;  
            if(operate == null)  
                throw new RuntimeException("运算符不能为空!");  
            else if(operate.equals("+"))  
                op = new AddOperation();  
            else if(operate.equals("-"))  
                op = new SubOperation();  
            else if(operate.equals("*"))  
                op = new MulOperation();  
            else if(operate.equals("/"))  
                op = new DivOperation();  
            else  
                throw new RuntimeException("运算符错误!");  
            return op;  
        }            
    }  

 

一张UML类图就能清晰表现简单工厂设计模式
技术分享

总结

        工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。

       抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。

       具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

 

核心思想就是:有一个专门的类来负责创建实例的过程。

 

       把产品看着是一系列的类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。

       如果简单工厂模式所涉及到的具体产品之间没有共同的逻辑,那么我们就可以使用接口来扮演抽象产品的角色;如果具体产品之间有功能的逻辑,我们就必须把这些共同的东西提取出来,放在一个抽象类中,然后让具体产品继承抽象类。为实现更好复用的目的,共同的东西总是应该抽象出来的。

技术分享

 

 

[大话设计模式]学习笔记——简单工厂模式

标签:

原文地址:http://www.cnblogs.com/yjing0508/p/5356134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!