简单工厂模式

Posted zuolanlan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂模式相关的知识,希望对你有一定的参考价值。

1、代码规范
  • 命名规范
  • 错误检查(输入格式检查、合法性检查)
  • 合理利用分支结构
  • 注重:可维护性、可复用性、可扩展性、灵活性
2、面向对象三大特性:封装、继承、多态
3、合理利用设计模式,能够使程序更加灵活,容易修改、易于复用。
 
 
一、通过实例来体现面向对象与工厂设计模式
1、面向过程的方法实现一个简单计算器
  
 1 package firstSimpleFactory;
 2 public class Calculate  {
 3        public static void main(String[] args) {
 4               System.out.println(123456);
 5                double numA=3;
 6                double numB=8;
 7                double result=0;
 8                String oper="+";
 9                switch(oper){
10                case "+": result=numA+numB; break;
11                case "-": result=numA-numB; break;
12                case "*": result=numA*numB; break;
13                case "/": {
14                       if (numB!=0) {
15                             result=numA/numB;break;
16                      }else{
17                            System.out.println("分母不能为零!");
18                      }
19                       break;
20                }
21                default:System.out.println("未知操作");
22                }
23                System.out.println(numA+oper+numB+"="+result);
24  }
25 }

 

2、面向对象的思想,结合工厂设计模式实现简单计算器
 1 package firstSimpleFactory;
 2 
 3 // 父类,抽象类
 4 class Operate{
 5     private double numA;
 6     private double numB;
 7     public void setNumA(double numa){
 8         this.numA=numa;
 9     }
10     public double getNumA() {
11         return this.numA;
12     }
13     public void setNumB(double numb){
14         this.numB=numb;
15     }
16     public double getNumB() {
17         return this.numB;
18     }
19     public double getResult() {
20         double result=0;
21         return result;
22         
23     }
24 }
25 
26 // 一群加减乘除子类
27 class AddOper extends Operate{
28     @Override
29     public double getResult(){
30         double result=0;
31         result=super.getNumA()+super.getNumB();
32         return result;
33     }
34 }
35 
36 class SubOper extends Operate{
37     @Override
38     public double getResult(){
39         double result=0;
40         result=super.getNumA()-super.getNumB();
41         return result;
42     }
43 }
44 
45 class MulOper extends Operate{
46     @Override
47     public double getResult(){
48         double result=0;
49         result=super.getNumA()*super.getNumB();
50         return result;
51     }
52 }
53 class DivOper extends Operate{
54     @Override
55     public double getResult(){
56         double result=0;
57         if (super.getNumB()!=0) {
58              result=super.getNumA()/super.getNumB();
59         }else{
60             System.out.println("分母不能为零!");
61         }
62         return result;
63     }
64 }
65 
66 // 简单工厂
67 class OperationFactory{
68     public static Operate createOperate(String operate){
69         Operate oper=null;
70         switch (operate) {
71         case "+":oper=new AddOper();break;
72         case "-":oper=new SubOper();break;
73         case "*":oper=new MulOper();break;
74         case "/":oper=new DivOper();break;
75         default:
76             break;
77         }
78         return oper;
79     }
80 }
81 
82 // 主程序
83 public class Calculate  {
84     public static void main(String[] args) {
85         System.out.println("开始");
86         Operate operate=OperationFactory.createOperate("+");
87         operate.setNumA(3);
88         operate.setNumB(8);
89          System.out.println(operate.getResult());
90  }
91 }

 

二、UML图

1、UML:Unified Modeling Language, 统一建模语言

2、作用:绘制类图,用来描述类之间的关系。

3、怎么画

(1)类的表示

技术分享图片

Student: 类名,若是抽象类,则斜体

age/class/stuID: 属性,+/ # /- 分别表示:public/ protected/ private

getStuID: 方法

(2)接口的表示

技术分享图片

(3)各种关系的表示

 技术分享图片

继承:继承谁,箭头指向谁,is-a的关系

接口实现:实现哪个接口,箭头指向谁

关联:当一个类需要“了解”另一个类的信息时,例如:企鹅需要知道大气的变化,这个可能是双向的

聚合:弱的“拥有”关系,例如:人群由人聚合而成,但是人不是人群的一部分,有点说不清楚,和复合对比一下

复合:又称“合成”“组成”,是一种强的”拥有“关系,例如:人和人手,人手是人的一部分

组合>聚合>关联>依赖;

 

 
 
 

以上是关于简单工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

PHP面向对象之选择工厂和更新工厂

设计模式-简单工厂工厂方法模式抽象工厂模式详解

设计模式之简单工厂模式

C++工厂模式(简单工厂工厂方法抽象工厂)

C++工厂模式(简单工厂工厂方法抽象工厂)