Java设计模式之工厂模式[笔记] 简介
设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便
分类 三大类[主要]:
一、创建型模式(5种)
①工厂方法
②抽象工厂
③单例
④创建者
⑤原型
二、结构型模式(7种)
①适配器模式
②装饰器模式
③代理模式
④外观模式
⑤桥接模式
⑥组合模式
⑦享元模式
三、行为型模式(11种)
①策略模式
②模板方法模式
③观察者模式
④迭代子模式
⑤责任链模式
⑥命令模式
⑦备忘录模式
⑧状态模式
⑨访问者模式
🔟中介者模式
①①解释器模式
其他两大类:
工厂模式 工厂模式,类的创建依赖于工厂类,
a. 一般工厂模式
一般,将工厂模式里的类设置为static静态的,不需要创建,直接调用。[静态工厂模式]
一个工厂类里就一个工厂方法,根据传入字段创建不同类的实例;
b. 多个工厂模式
将a升级,一个工厂类中声明多个工厂方法,不同的方法产生不同类的实例;
c. 静态工厂模式
将b升级,工厂类中的多个工厂方法声明为static类型,使用时不用new对象,直接使用工厂类名.方法名即可;
相比较a,b,c, 通常选择c 静态工厂方法模式;
实例
所有实例及分析基本都在代码及其注释中,便于阅读理解其含义!
一般工厂模式 1 2 3 4 5 6 7 8 9 package javaClassExercise.designPatterns.factoryMethod.generalFactoryMethod;public interface Sender { public void send () ; }
1 2 3 4 5 6 7 8 9 10 11 12 package javaClassExercise.designPatterns.factoryMethod.generalFactoryMethod;public class SmsSender implements Sender { @Override public void send () { System.out.println("这是另一个Sender接口实现类 -- SmsSender !!!" ); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 package javaClassExercise.designPatterns.factoryMethod.generalFactoryMethod;public class MailSender implements Sender { @Override public void send () { System.out.println("这是Sender接口实现类 -- MailSender !!!" ); } }
工厂类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 package javaClassExercise.designPatterns.factoryMethod.generalFactoryMethod;public class SendFactory { public Sender produce (String type) { if ("mail" .equals(type)) { return new MailSender (); } else if ("sms" .equals(type)) { return new SmsSender (); } else { System.out.println("请输入正确的type !" ); return null ; } } }
首先,Java中是对大小写敏感 , 只有null, 无NULL、Null这类写法。null也是Java中的关键字; 就像其它类型一样,每种原始类型都有其默认值,int类型默认值0,boolean默认值false; 而null是任何引用类型的默认值 , 在Java中任何引用类型变量(Integer、Short、Double等,但是int、short、double这些则不可!)将null作为默认值
例如:
1 2 3 Object object = null ; Object object = NULL; Object object = Null;
关于Java中null的九件事, 点击查看 .
> 测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package javaClassExercise.designPatterns.factoryMethod.generalFactoryMethod;public class GeneralFactoryMethodTest { public static void main (String... args) { SendFactory sendFactory = new SendFactory (); Sender sender = sendFactory.produce("sms" ); sender.send(); Sender sender1 = sendFactory.produce("mail" ); sender1.send(); } }
多个工厂模式
对一般工厂模式中的工厂类升级
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package javaClassExercise.designPatterns.factoryMethod.manyFactoryMethod;public class ManyFactoryMethod { public Sender produceMail () { return new MailSender (); } public Sender produceSms () { return new SmsSender (); } }
测试类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package javaClassExercise.designPatterns.factoryMethod.manyFactoryMethod;public class ManyFactoryMethodTest { public static void main (String[] args) { ManyFactoryMethod manyFactoryMethod = new ManyFactoryMethod (); Sender sender = manyFactoryMethod.produceMail(); sender.send(); Sender sender1 = manyFactoryMethod.produceSms(); sender1.send(); } }
总结:
多个工厂模式即:将一般工厂模式的一个工厂类中的一个方法进行升级改造,改写成一个工厂类多个方法,各个方法对应具体功能模块类的实例化new.
静态工厂模式
将多工厂模式升级改造,将工厂类声明为static静态类型,使其不用实例化对象就可以直接调用对应的方法直接创建对应功能模块类的实例对象, 使用方式: 类名.方法名.
静态工厂类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 package javaClassExercise.designPatterns.factoryMethod.staticFactoryMethod;public class StaticFactoryMethod { public static Sender produceMail () { return new MailSender (); } public static Sender produceSms () { return new SmsSender (); } } class test { public test () { System.out.println("您调用了test类的构造方法 !" ); } public void testC () { System.out.println("您调用了test类中的非静态的testC() 方法 !" ); } public static void testD () { System.out.println("调用的是test类中的静态方法testD() 方法 !" ); } }
测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package javaClassExercise.designPatterns.factoryMethod.staticFactoryMethod;public class StaticFactoryMethodTest { public static void main (String... args) { Sender sender = StaticFactoryMethod.produceMail(); sender.send(); Sender sender1 = StaticFactoryMethod.produceSms(); sender1.send(); } }
对于工厂模式,一般选择第三种: 静态工厂模式即可.