设计模式

设计模式是在大量的实践中总结和理论化后优选的代码结构、编程风格、以及解决问题的思考方式。

单例模式(singleton)

  1. 饿汉式
  1. class SingletonTest {
  2. private static SingletonTest instance = new SingletonTest();
  3. private SingletonTest() {
  4. }
  5. public static SingletonTest getInstance() {
  6. return instance;
  7. }
  8. }

2.懒汉式
dcl失效问题通过volatile解决

  1. class Singleton {
  2. /* 私有构造方法,防止被实例化 */
  3. private Singleton() {
  4. }
  5. /* 此处使用一个内部类来维护单例 */
  6. private static class SingletonFactory {
  7. private static Singleton instance = new Singleton();
  8. }
  9. /* 获取实例 */
  10. public static Singleton getInstance() {
  11. return SingletonFactory.instance;
  12. }
  13. }

代理模式(proxy)

工厂模式

  1. 工厂方法模式—-普通工厂模式
    建立一个工厂类,对实现了同一个接口的一些类进行实例的创建
  1. //接口
  2. public interface sender {
  3. public void sender();
  4. }
  5. //邮件实现类
  6. public class MailSender implements sender {
  7. @Override
  8. public void sender() {
  9. System.out.println("发送邮件");
  10. }
  11. }
  12. //短信实现类
  13. public class SmsSender implements sender {
  14. @Override
  15. public void sender() {
  16. System.out.println("发送短信");
  17. }
  18. }
  19. //工厂类
  20. public class Factory {
  21. public sender produce(String type){
  22. if(type.equals("sms")){
  23. return new SmsSender();
  24. }
  25. else if(type.equals("mail")){
  26. return new MailSender();
  27. }
  28. else{
  29. System.out.println("请录入正确的类型");
  30. return null;
  31. }
  32. }
  33. }
  34. //根据传入的type生产
  35. public static void main(String[] args) {
  36. Factory f = new Factory();
  37. sender s = f.produce("sms");
  38. s.sender();
  39. }
  1. 工厂方法模式—-多个工厂方法模式
    提供多个工厂方法,分别创建对象。

只修改工厂类

  1. public class Factory {
  2. public sender produceMile(){
  3. return new MailSender();
  4. }
  5. public sender produceSms(){
  6. return new SmsSender();
  7. }
  1. 工厂方法模式—-静态工厂方式模式
  1. public class Factory{
  2. public static sender produceMile(){
  3. return new MailSender();
  4. }
  5. public static sender produceSms(){
  6. return new SmsSender();
  7. }
  8. }
  1. 抽象工厂模式
    对工厂类进行抽象,创建多个工厂类
  1. public interface Provider {
  2. public Sender produce();
  3. }
  4. public class SendMailFactory implements Provider {
  5. @Override
  6. public Sender produce(){
  7. return new MailSender();
  8. }
  9. }
  10. public class SendSmsFactory implements Provider{
  11. @Override
  12. public Sender produce() {
  13. return new SmsSender();
  14. }
  15. }