简单工厂模式--《大话设计模式》读书笔记
2018-03-25 23:30
337 查看
概念
简单工厂模式:如加减乘除计算,把加减乘除运算封装成对象。用一个工厂来决定实例化哪个对象。
一、先看效果图:
![](https://img-blog.csdn.net/20180325232629812?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FscGluaXN0V2FuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
二、代码实现
1.Operation超类和四个运算类
public abstract class Operation {
public abstract double GetResult(double NumberA,double NumberB);
}public class OperationAdd extends Operation{
@Override
public double GetResult(double NumberA, double NumberB) {
double result = 0;
result = NumberA + NumberB;
return result;
}
}
2.主函数布局activity_main:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.rich.designmode.MainActivity">
<TextView
android:id="@+id/tv_enter_number_a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter Num A:"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.2"
app:layout_constraintVertical_bias="0.2"
/>
<EditText
android:id="@+id/et_number_a"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tv_enter_number_a"
app:layout_constraintBottom_toBottomOf="@id/tv_enter_number_a"
app:layout_constraintLeft_toRightOf="@id/tv_enter_number_a"
app:layout_constraintRight_toRightOf="parent"
android:layout_margin="5dp"
/>
<TextView
android:id="@+id/tv_enter_operate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter Operate:"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.2"
app:layout_constraintVertical_bias="0.3"
/>
<EditText
android:id="@+id/et_operate"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tv_enter_operate"
app:layout_constraintBottom_toBottomOf="@id/tv_enter_operate"
app:layout_constraintLeft_toRightOf="@id/tv_enter_operate"
app:layout_constraintRight_toRightOf="parent"
android:layout_margin="5dp"
/>
<TextView
android:id="@+id/tv_enter_number_b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter Num B:"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.2"
app:layout_constraintVertical_bias="0.4"
/>
<EditText
android:id="@+id/et_number_b"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tv_enter_number_b"
app:layout_constraintBottom_toBottomOf="@id/tv_enter_number_b"
app:layout_constraintLeft_toRightOf="@id/tv_enter_number_b"
app:layout_constraintRight_toRightOf="parent"
android:layout_margin="5dp"
/>
<Button
android:id="@+id/btn_ok"
android:text="ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.5"
/>
<TextView
android:id="@+id/tv_result"
android:text="Result:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.2"
app:layout_constraintVertical_bias="0.6"
/>
<EditText
android:id="@+id/et_result"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tv_result"
app:layout_constraintBottom_toBottomOf="@id/tv_result"
app:layout_constraintLeft_toRightOf="@id/tv_result"
app:layout_constraintRight_toRightOf="parent"
/>
</android.support.constraint.ConstraintLayout>
3.MainActivity:
public class MainActivity extends AppCompatActivity {
private EditText etNumberA,etOperate,etNumberB,etResult;
private Button btnOk;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etNumberA = findViewById(R.id.et_number_a);
etOperate = findViewById(R.id.et_operate);
etNumberB = findViewById(R.id.et_number_b);
etResult = findViewById(R.id.et_result);
btnOk = findViewById(R.id.btn_ok);
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double NumberA = 0;
double NumberB = 0;
try{
NumberA = Double.parseDouble(etNumberA.getText().toString());
NumberB = Double.parseDouble(etNumberB.getText().toString());
}catch (Exception e){
e.printStackTrace();
etResult.setText("Illegal Number");
return;
}
String operate = etOperate.getText().toString();
if(NumberB == 0 && operate.equals("/")){
etResult.setText("Divisor can not Be 0");
return;
}
Operation operation = OperationFactory.createOperation(operate);
if(operation == null){
etResult.setText("Illegal Operate");
return;
}
double result = operation.GetResult(NumberA,NumberB);
String tvResult = String.valueOf(result);
etResult.setText(tvResult);
}
});
}
}
以上,就是简单工厂模式。
简单工厂模式:如加减乘除计算,把加减乘除运算封装成对象。用一个工厂来决定实例化哪个对象。
一、先看效果图:
二、代码实现
1.Operation超类和四个运算类
public abstract class Operation {
public abstract double GetResult(double NumberA,double NumberB);
}public class OperationAdd extends Operation{
@Override
public double GetResult(double NumberA, double NumberB) {
double result = 0;
result = NumberA + NumberB;
return result;
}
}
public class OperationSubtract extends Operation{ @Override public double GetResult(double NumberA, double NumberB) { double result = 0; result = NumberA - NumberB; return result; } }
public class OperationMultiply extends Operation{ @Override public double GetResult(double NumberA, double NumberB) { double result = 0; result = NumberA * NumberB; return result; } }
public class OperationDivide extends Operation{ @Override public double GetResult(double NumberA, double NumberB) { if(NumberB == 0){ throw new IllegalArgumentException("Divisor can not Be 0"); } double result = 0; result = NumberA / NumberB; return result; } }
public class OperationFactory { public static Operation createOperation(String operate){ Operation operation = null; switch (operate){ case "+": operation = new OperationAdd(); break; case "-": operation = new OperationSubtract(); break; case "*": operation = new OperationMultiply(); break; case "/": operation = new OperationDivide(); break; } return operation; } }
2.主函数布局activity_main:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.rich.designmode.MainActivity">
<TextView
android:id="@+id/tv_enter_number_a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter Num A:"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.2"
app:layout_constraintVertical_bias="0.2"
/>
<EditText
android:id="@+id/et_number_a"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tv_enter_number_a"
app:layout_constraintBottom_toBottomOf="@id/tv_enter_number_a"
app:layout_constraintLeft_toRightOf="@id/tv_enter_number_a"
app:layout_constraintRight_toRightOf="parent"
android:layout_margin="5dp"
/>
<TextView
android:id="@+id/tv_enter_operate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter Operate:"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.2"
app:layout_constraintVertical_bias="0.3"
/>
<EditText
android:id="@+id/et_operate"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tv_enter_operate"
app:layout_constraintBottom_toBottomOf="@id/tv_enter_operate"
app:layout_constraintLeft_toRightOf="@id/tv_enter_operate"
app:layout_constraintRight_toRightOf="parent"
android:layout_margin="5dp"
/>
<TextView
android:id="@+id/tv_enter_number_b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter Num B:"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.2"
app:layout_constraintVertical_bias="0.4"
/>
<EditText
android:id="@+id/et_number_b"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tv_enter_number_b"
app:layout_constraintBottom_toBottomOf="@id/tv_enter_number_b"
app:layout_constraintLeft_toRightOf="@id/tv_enter_number_b"
app:layout_constraintRight_toRightOf="parent"
android:layout_margin="5dp"
/>
<Button
android:id="@+id/btn_ok"
android:text="ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.5"
/>
<TextView
android:id="@+id/tv_result"
android:text="Result:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.2"
app:layout_constraintVertical_bias="0.6"
/>
<EditText
android:id="@+id/et_result"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tv_result"
app:layout_constraintBottom_toBottomOf="@id/tv_result"
app:layout_constraintLeft_toRightOf="@id/tv_result"
app:layout_constraintRight_toRightOf="parent"
/>
</android.support.constraint.ConstraintLayout>
3.MainActivity:
public class MainActivity extends AppCompatActivity {
private EditText etNumberA,etOperate,etNumberB,etResult;
private Button btnOk;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etNumberA = findViewById(R.id.et_number_a);
etOperate = findViewById(R.id.et_operate);
etNumberB = findViewById(R.id.et_number_b);
etResult = findViewById(R.id.et_result);
btnOk = findViewById(R.id.btn_ok);
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
double NumberA = 0;
double NumberB = 0;
try{
NumberA = Double.parseDouble(etNumberA.getText().toString());
NumberB = Double.parseDouble(etNumberB.getText().toString());
}catch (Exception e){
e.printStackTrace();
etResult.setText("Illegal Number");
return;
}
String operate = etOperate.getText().toString();
if(NumberB == 0 && operate.equals("/")){
etResult.setText("Divisor can not Be 0");
return;
}
Operation operation = OperationFactory.createOperation(operate);
if(operation == null){
etResult.setText("Illegal Operate");
return;
}
double result = operation.GetResult(NumberA,NumberB);
String tvResult = String.valueOf(result);
etResult.setText(tvResult);
}
});
}
}
以上,就是简单工厂模式。
相关文章推荐
- 读书笔记系列1:大话设计模式 -- 简单工厂模式
- 《大话设计模式》读书笔记一 简单工厂模式
- 《大话设计模式》读书笔记(C++代码实现) 第一章:简单工厂模式
- 《大话设计模式》读书笔记-第1章 简单工厂模式
- 《大话设计模式》读书笔记(C++代码实现) 第一章:简单工厂模式
- 简单工厂模式---《大话设计模式》笔记
- 设计模式读书笔记---java简单工厂模式
- 大话设计模式(五 体会简单工厂模式的美妙)
- 一、大话设计模式 之 简单工厂模式
- 大话设计模式:第一章简单工厂模式
- 大话设计模式一:简单工厂模式
- 大话设计模式(一)简单工厂模式
- 《大话设计模式》--简单工厂模式
- 《大话设计模式》之--第1章 代码无错就是优?----简单工厂模式
- 大话设计模式中简单工厂模式和策略模式的商场收银软件实例的C++代码
- 《大话设计模式》观后总结1--简单工厂模式与工厂方法模式
- 大话设计模式:第一章简单工厂模式
- 《大话设计模式》读书笔记:三种工厂模式
- 23种设计模式之简单工厂——大话设计模式
- 大话设计模式-简单工厂模式