基础几个设计模式

来源:互联网 发布:sql insert 单引号 编辑:程序博客网 时间:2024/06/04 19:39

Java中设计模式总结

第一种:工厂方法模式(工厂模式)

01:普通工厂模式

概念:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建

1.建立共通接口

public interface Sends {

      public String send();

}

2.创建实现类

public class EmailSend implements Sends{

      @Override

      public String send() {

         return"emailSend执行..........";

      }

}

第二个实现类:

public class SmsSend implements Sends{

      @Override

      public String send() {

         return"sms Send执行..........";

      }

}

3.创建工厂类

public class SendFactory {

   public Sends sendsMethed(Stringtype){

      if("email".equals(type)){

        return new EmailSend();

      }else if("sms".equals(type)){

        return new SmsSend();

      }else{

        return null;

      }

   }

}

4.创建测试类

public class Test {

   public static void main(String[] args) {

      SendFactoryfactory=new SendFactory();

      Sendssend=factory.sendsMethed("email");

      System.out.println(send.send());

   }

}

缺点:如果传递字符串错误,将不能正确创建对象。

02:多个工厂方法模式

概念:是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象

 

1.其他不变,修改工厂类如下:

public class SendFactory {

   public Sends emailMethod(){

      return new EmailSend();

   }

   public Sends smsMethod(){

      return new SmsSend();

   }

}

2.修改测试类

public class Test {

   public static void main(String[] args) {

      SendFactoryfactory=new SendFactory();

      Sendssend=factory.emailMethod();

      System.out.println(send.send());

   }

}

缺点:需要创建工厂类实例

03:静态工厂方法模式

概念:将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

1.修改工厂类:

public class SendFactory {

   public static Sends emailMethod(){

      return new EmailSend();

   }

   public static Sends smsMethod(){

      returnnew SmsSend();

   }

}

2.修改测试类:

public class Test {

   public static void main(String[] args) {

      Sendssend=SendFactory.emailMethod();

      System.out.println(send.send());

   }

}


第二种:抽象工厂模式

概念:创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

1.建立共通接口

public interface Sends {

      public String send();

}

2.创建实现类

public class EmailSend implements Sends{

      @Override

      public String send() {

         return"emailSend执行..........";

      }

}

第二个实现类:

public class SmsSend implements Sends{

      @Override

      public String send() {

         return"sms Send执行..........";

      }

}

3.创建接口

public interface Provider {

   public Sendsproduce();

}

4.创建多个工厂类,并且实现接口

public class EmailFactory implements Provider{

   @Override

   public Sends produce() {

      return new EmailSend();

   }

}

第二个工厂类

public class SmsFactory implements Provider{

   @Override

   public Sends produce() {

      return new SmsSend();

   }

}

5.测试类

public class Test {

   public static void main(String[] args) {

      Providerprovider= new EmailFactory();

      Sendssend=provider.produce();

      System.out.println(send.send());

   }

}

优点:新添功能,直接添加新的实现类,实现Sends接口,然后创建一个工厂类实现Provider接口就ok了,无需改动现有代码。扩展性较好。

第三种:单例模式

概念:是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在

1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。

2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。

3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。

第四种:建造者模式

概念:将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。

1、2步同上一样。

3.创建工厂

public class Builder {

   private static List<Sends> list=new ArrayList<Sends>();

   public void emailMethod(intcount){

      for (inti = 0; i < count; i++) {

        list.add(new EmailSend());

      }

   }

   public void smsMethod(intcount){

      for (inti = 0; i < count; i++) {

        list.add(new SmsSend());

      }

   }

   public static List<Sends> getList() {

      return list;

   }

   public static void setList(List<Sends>list) {

      Builder.list = list;

   }

}

4.创建测试类

public class Test {

   public static void main(String[] args) {

      Builderbuilder=new Builder();

      builder.emailMethod(5);

      Listlist=Builder.getList();

      System.out.println(list.size()+":zzz");

   }

}

 

 

 

 

0 0
原创粉丝点击