您的位置:首页 > 其它

简单工厂模式--《大话设计模式》读书笔记

2018-03-25 23:30 337 查看
概念
简单工厂模式:如加减乘除计算,把加减乘除运算封装成对象。用一个工厂来决定实例化哪个对象。

一、先看效果图:



二、代码实现

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);
}
});
}
}

以上,就是简单工厂模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息