Android的开发之&java23中设计模式------>工厂模式

使用情景:


情况一:如果一个对象拥有很多子类,那么创建该对象的子类使用工厂模式是最合适的,不但可以面向接口的编程,为维护以及开发带来方便。

情况二:再不确定会有多少个处理操作时应该考虑使用简单工厂模式,如针对同样的接收到的数据,处理的逻辑可能会不同,可能以后还会增加新的操作。不可能创建对象时,在该对象的构造方法里创建成员变量然后再赋值给该成员变量。而且使用工厂模式也提高了代码的重用性。


好处主要有:


1、将创建实例的工作与使用实例的工作分开
2、把初始化实例时的工作放到工厂里进行,使代码更容易维护。
3、使得修改代码时不会引起太大的变动,良好的扩展性。

缺点:耦合性提高,由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中,

这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利。


一:

简单工厂模式


public interface Sender {
    String Send();
}


public class SendFactory {


    public Sender produce(String type){
        if ("mail".equals(type)){
            return new MailSender();
        }else if ("sms".equals(type)){
            return new SmsSender();
        }else{
            return null;
        }
    }

}


测试代码


public static void main(String[] args) {
      SendFactory factory=new SendFactory();
      Sender sender=factory.produce("sms");
      str=sender.Send();
      Toast.makeText(FactoryMethodActivity.this,str, Toast.LENGTH_SHORT).show();



二:
多个工厂方法模式



public interface Sender {
    String Send();
}


/**
 * Created by Administrator on 2017-8-23.
 * 多个工厂方法模式,对普通工厂方法模式的改进
 * 在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,
 * 而多个工厂方法模式是提供多个工厂方法,分别创建对象
 */
public class SendFactory2 {
    public Sender produceMail(){
        return new MailSender();
    }
    public Sender produceSms(){
        return new SmsSender();
    }
}
public interface Sender {
    String Send();

}


测试代码


public static void main(String[] args) { 
SendFactory2 factory2=new SendFactory2();
Sender sender1=factory2.produceSms();
str=sender1.Send();
Toast.makeText(FactoryMethodActivity.this,str, Toast.LENGTH_SHORT).show();
}



三:
静态工厂方法模式



public interface Sender {
    String Send();
}
/**
 * Created by Administrator on 2017-8-23.
 * 静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
 */
public class SendFactory3 {
    public static Sender produceMail(){
        return new MailSender();
    }


    public static Sender produceSms(){
        return new SmsSender();
    }

}


测试代码


public static void main(String[] args) { 
Sender sender2=SendFactory3.produceMail();
str=sender2.Send();
Toast.makeText(FactoryMethodActivity.this,str, Toast.LENGTH_SHORT).show();
}



总结:工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。
在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,
第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。


github地址:https://github.com/zyj18410105150/DesignMode

猜你喜欢

转载自blog.csdn.net/jie1123161402/article/details/78423422
今日推荐