Java设计模式之抽象工厂模式

    xiaoxiao2021-12-14  17

    1.抽象工厂模式

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

    2.UML建模图

    3.代码实现

    (1)接口类Provider.java和Sender.java

    package com.zhoujian.abstractfactory.impl; /** * Created by zhoujian on 2016/12/1. * * * 接口类 Provider,返回的是接口,具体返回什么接口,由子类实现 * */ public interface Provider { public Sender produde(); } package com.zhoujian.abstractfactory.impl; /** * Created by zhoujian on 2016/12/1. * * 接口类 Sender,用于发送,具体实现由子类实现 */ public interface Sender { public void send(); }

    (2)实现Sender的具体实现类

    package com.zhoujian.abstractfactory.bean; import android.content.Context; import android.widget.Toast; import com.zhoujian.abstractfactory.impl.Sender; /** * Created by zhoujian on 2016/12/1. * * 用于发送邮件的类 */ public class MailSend implements Sender { private Context mContext; public MailSend(Context mContext) { this.mContext = mContext; } @Override public void send() { Toast.makeText(mContext, "发送邮件", Toast.LENGTH_SHORT).show(); } } import android.content.Context; import android.widget.Toast; import com.zhoujian.abstractfactory.impl.Sender; /** * Created by zhoujian on 2016/12/1. * * 用于发送短信的类 */ public class SmsSend implements Sender { private Context mContext; public SmsSend(Context mContxt) { this.mContext = mContxt; } @Override public void send() { Toast.makeText(mContext, "发送短信", Toast.LENGTH_SHORT).show(); } }

    (3)实现Provider的具体实现类

    package com.zhoujian.abstractfactory.factory; import android.content.Context; import com.zhoujian.abstractfactory.bean.MailSend; import com.zhoujian.abstractfactory.impl.Provider; import com.zhoujian.abstractfactory.impl.Sender; /** * Created by zhoujian on 2016/12/1. */ public class MailSendFactory implements Provider { private Context mContext; public MailSendFactory(Context mContext) { this.mContext= mContext; } @Override public Sender produde() { return new MailSend(mContext); } } package com.zhoujian.abstractfactory.factory; import android.content.Context; import com.zhoujian.abstractfactory.bean.SmsSend; import com.zhoujian.abstractfactory.impl.Provider; import com.zhoujian.abstractfactory.impl.Sender; /** * Created by zhoujian on 2016/12/1. */ public class SmsSendFatory implements Provider { private Context mContext; public SmsSendFatory(Context mContext) { this.mContext = mContext; } @Override public Sender produde() { return new SmsSend(mContext); } }

    (4)测试类MainActivity.java

    package com.zhoujian.abstractfactory.activity; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import com.zhoujian.abstractfactory.R; import com.zhoujian.abstractfactory.factory.MailSendFactory; import com.zhoujian.abstractfactory.factory.SmsSendFatory; import com.zhoujian.abstractfactory.impl.Sender; import butterknife.ButterKnife; import butterknife.InjectView; /** 抽象工厂模式: 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改, 这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决? 就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了, 不需要修改之前的代码 */ public class MainActivity extends Activity { @InjectView(R.id.bt_send_mail) Button mBtSendMail; @InjectView(R.id.bt_send_sms) Button mBtSendSms; private Sender mSender; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); clickEvent(); } private void clickEvent() { mBtSendMail.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { MailSendFactory mailSendFactory = new MailSendFactory(MainActivity.this); mSender = mailSendFactory.produde(); mSender.send(); } }); mBtSendSms.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { SmsSendFatory mSmsSendFatory= new SmsSendFatory(MainActivity.this); mSender = mSmsSendFatory.produde(); mSender.send(); } }); } @Override protected void onRestart() { super.onRestart(); } @Override protected void onStart() { super.onStart(); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onStop() { super.onStop(); } @Override protected void onDestroy() { super.onDestroy(); } }

    4.源码下载地址

    源码下载:https://github.com/zeke123/AbstractFactory

    转载请注明原文地址: https://ju.6miu.com/read-963409.html

    最新回复(0)