工厂模式

  • 例子还是用简单工厂的例子,在简单工厂的demo中,我创建了一个接口:FengZhuang,他内部有个方法:
    public double yunSuan(double a, Integer b);a,b是要进行运算的数据。创建类去实现这个接口,然后完善yunSuan这个方法(加法就写加法的方法。减法就写减法的方法)。然后再创建一个工厂接口fzFactory,给发一个返回值为Fengzhuang类型的方法:FengZhuang createFengZhuang();。然后写具体方法的工厂类:需要实现接口fzFactory,实现接口方法FengZhuang createFengZhuang();给他返回值为FengZhuang实现类。然后在Activity中输入以下代码即可:
    fzFactory mFactory = new syFactory();//只要实例化不同,那么也就可以进行不同的运算
    fz = mFactory.createFengZhuang();
    fz.yunSuan(numA, numB);。运用多态的方法实例化一个运算工厂类fz是(FengZhuang类型的数据)mFactory.createFengZhuang();改方法返回值是Fengzhuang类型,所以fz = mFactory.createFengZhuang();得到: FengZhuang fz=new xxYunSuan();有点绕,开始直接上代码,从运算这一块开始:
  • YunSuan:
    • FengZhuang:
      package pattern.design.com.designpattern.FactoryPattern.YunSuan;

      /**
       * Created by hujhguiyhiu on 2016/9/2.
       */
      public interface FengZhuang {
          //虚方法,主要就是在继承者们那进行逻辑运算,算法类
          public double yunSuan(double a, Integer b);
      }
    • fpYunSuan:
      package pattern.design.com.designpattern.FactoryPattern.YunSuan;

      import android.util.Log;

      /**
       * Created by hujhguiyhiu on 2016/9/2.
       */
      public class fpYunSua implements FengZhuang {
          @Override
          public double yunSuan(double a, Integer b) {
              Log.d("test""a=" + a + ",b=" + b);
              double t = 0;
              t = a + b;
              Log.d("test""fp总计:+ t);
              return t;
          }
      }
    • syYunSuan:
      package pattern.design.com.designpattern.FactoryPattern.YunSuan;

      import android.util.Log;

      /**
       * Created by hujhguiyhiu on 2016/9/2.
       */
      public class syYunSua implements FengZhuang {
          @Override
          public double yunSuan(double a, Integer b) {
              Log.d("test""a=" + a + ",b=" + b);
              double t = 0;
              t = a + b;
              Log.d("test""sy总计:+ t);
              return t;
          }
      }
    • zlxYunSuan:
      package pattern.design.com.designpattern.FactoryPattern.YunSuan;

      import android.util.Log;

      /**
       * Created by hujhguiyhiu on 2016/9/2.
       */
      public class zlxYunSua implements FengZhuang {
          @Override
          public double yunSuan(double a, Integer b) {
              Log.d("test""a=" + a + ",b=" + b);
              double t = 0;
              t = a + b;
              Log.d("test""zlx总计:+ t);
              return t;
          }
      }
  • Factory类:
    • fzFactory:
      package pattern.design.com.designpattern.FactoryPattern.factory;

      import pattern.design.com.designpattern.FactoryPattern.YunSuan.FengZhuang;

      /**
       * Created by hujhguiyhiu on 2016/9/2.
       */
      public interface fzFactory {
          FengZhuang createFengZhuang();
      }
    • fpFactory:
      package pattern.design.com.designpattern.FactoryPattern.factory;

      import pattern.design.com.designpattern.FactoryPattern.YunSuan.FengZhuang;
      import pattern.design.com.designpattern.FactoryPattern.YunSuan.fpYunSua;

      /**
       * Created by hujhguiyhiu on 2016/9/2.
       */
      public class fpFactory implements fzFactory {
          @Override
          public FengZhuang createFengZhuang() {
              return new fpYunSua();
          }
      }
    • syFactory:
      package pattern.design.com.designpattern.FactoryPattern.factory;

      import pattern.design.com.designpattern.FactoryPattern.YunSuan.FengZhuang;
      import pattern.design.com.designpattern.FactoryPattern.YunSuan.syYunSua;

      /**
       * Created by hujhguiyhiu on 2016/9/2.
       */
      public class syFactory implements fzFactory {
          @Override
          public FengZhuang createFengZhuang() {

              return new syYunSua();
          }
      }
    • zlxFactory:
      package pattern.design.com.designpattern.FactoryPattern.factory;

      import pattern.design.com.designpattern.FactoryPattern.YunSuan.FengZhuang;
      import pattern.design.com.designpattern.FactoryPattern.YunSuan.zlxYunSua;

      /**
       * Created by hujhguiyhiu on 2016/9/2.
       */
      public class zlxFactory implements fzFactory {
          @Override
          public FengZhuang createFengZhuang() {
              return new zlxYunSua();
          }
      }
  • Activity:
    package pattern.design.com.designpattern;

    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;

    import pattern.design.com.designpattern.FactoryPattern.YunSuan.FengZhuang;
    import pattern.design.com.designpattern.FactoryPattern.factory.fzFactory;
    import pattern.design.com.designpattern.FactoryPattern.factory.syFactory;

    public class MainActivity extends AppCompatActivity {
        private FengZhuang fz;
        private EditText editText1;
        private EditText editText2;
        private Button bt1;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            factory();
        }

        public void factory() {
            editText1 = (EditText) findViewById(R.id.et1);
            editText2 = (EditText) findViewById(R.id.et2);
            bt1 = (Button) findViewById(R.id.bt1);
            //类型
            bt1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    double numA = Double.valueOf(editText1.getText().toString());
                    int numB = Integer.valueOf(editText2.getText().toString());
                    fzFactory mFactory = new syFactory();//只要实例化不同,那么也就可以进行不同的运算
                    fz = mFactory.createFengZhuang();
                    fz.yunSuan(numA, numB);
                }
            });
        }
    }

你可能感兴趣的:(Android设计模式,工厂模式)