Java_23种设计模式(二)----- 创建型模式
来源:互联网 发布:网络综合布线设计图 编辑:程序博客网 时间:2024/06/05 11:42
/* * 创建型模式 * 1、 工厂方法模式: 简单工厂方法; 多个工厂方法; 静态工厂方法 * 2、 抽象工厂模式 * 3、 单例模式: 饿汉式模式和懒汉式模式 --- 通过创建对象的先后顺序来判断 先创建的叫饿汉;通过方法创建的叫懒汉 * 4、 建造者模式 * 5、 原型模式 */public class CreateModel { // 1. 工厂方法模式 Sender s = new CommSenderFactory().producer("sms"); // 简单工厂 s.send(); Sender s1 = new MultiSenderFactory().smsProduer(); // 多个工厂方法模式; s1.send(); Sender s2 = StaticSenderFatory.mailProduer(); // 静态工厂方法模式 s2.send(); // 2. 抽象工厂模式 Sender s3 = new MailSenderFactoryImpl().producer(); s3.send(); // 3. 单例模式 SingleModel s = SingleModel.getInstance(); MultiSingleModel s1 = MultiSingleModel.getInstance(); MultiSingleModel2 s2 = MultiSingleModel2.getInstance(); InnerSingleModel s3 = InnerSingleModel.getInstance(); // 4. 建造者模式 new Builder().producerMailSender(10); // 5. 原型模式}/* * 原型模式 ------ 类似于克隆 分为浅克隆和深克隆 */ class Prototype implements Cloneable { public Object clone() throws CloneNotSupportedException { Prototype proto = (Prototype)super.clone(); return proto; } } /* * 建造者模式 ---- 创建多个复合对象 * 工厂模式 关注的是创建单个产品 * 建造者模式 关注创建符合对象, 有多个部分 */class Builer { List<Sender> list = new ArrayList<Sender>(); public void produceMailSender ( int count ) { for ( int i=0; i<count; i++ ) { list.add(new MailSender()); } } public void produceSmsSender ( int count ) { for ( int i=0; i<count; i++ ) { list.add(new SmsSender()); } }}/* * 饿汉式单例模式 在类初始化时,已经自行实例化,并且以后不再改变,所以天生是线程安全的 */class HungerSingleModel { private HungerSingleModel() {} private static final HungerSingleModel single = new HungerSingleModel(); public static HungerSingleModel getInstance() { return single; }}/* * 内部类单例模式 ---- 通过内部类的机制,保证当一个类被加载时,这个类的加载过程是线程互斥的 * ------缺点;如果在构造函数抛出异常, 实例将永远得不到创建,也会出错 * 也叫做懒汉式单例 在第一次调用的时候,实例化自己 */class InnerSingleModel { private InnerSingleModel () {} private static class SingletonFactory { private static final InnerSingleModel single = new InnerSingleModel(); } public static InnerSingleModel getInstance() { return SingletonFactory.single; }}/* * 多线程单例耗时少模式 --- 同样适合多线程,不过存在异常风险 * 也叫做懒汉式单例 在第一次调用的时候,实例化自己 */class MultiSingleModel2 { private MultiSingleModel2 () {} public static MultiSingleModel2 single; public static MultiSingleModel2 getInstance () { if ( single == null ) { synchronized (single ) { if ( single == null ) { return single = new MultiSingleModel2(); // 此处由于jvm的加载机制,可能会出现问题 } } } return single; }}/* * 多线程单例模式 --- 适合多线程, 性能低下 * 也叫做懒汉式单例 在第一次调用的时候,实例化自己 */class MultiSingleModel { private MultiSingleModel () {} public static MultiSingleModel single ; public synchronized static MultiSingleModel getInstance() { if ( single == null ) { single = new MultiSingleModel(); } return single; }}/* * 普通单例模式 ---- 不适合多线程 * 也叫做懒汉式单例 在第一次调用的时候,实例化自己 */class SingleModel { private SingleModel () {} public static SingleModel single; public static SingleModel getInstance () { if ( single == null ) { single = new SingleModel() ; } return single; }}/* * 抽象工厂模式 */class MailSenderFactory implements ISenderFactory { public Sender producer () { return new MailSender(); }} class SmsSenderFactory implements ISenderFactory { public Sender producer () { return new SmsSender(); }} interface ISenderFactory { Sender producer();}/* * 静态工厂方法 */class StaticSenderFatory { public static Sender mailProduer () { return new MailSender(); } public static Sender smsProduer () { return new SmsSender(); }}/* * 多个工厂方法 */class MultiSenderFactory { public Sender mailProduer () { return new MailSender(); } public Sender smsProduer () { return new SmsSender(); }}/* * 普通工厂方法 */class CommSenderFactory { public Sender producer ( String type ) { if ( "mail".equals(type) ) { return new MailSender(); } else if ( "sms".equals(type) ) { return new SmsSender(); } else { return null; } }}class SmsSender implements Sender { public void send () { System.out.println("SmsSender -> send"); }}class MailSender implements Sender { public void send () { System.out.println("MailSender -> send"); }}interface Sender { void send();}
阅读全文
0 0
- Java_23种设计模式(二)----- 创建型模式
- Java_23种设计模式(三)----- 结构型模式
- Java_23种设计模式(四)----- 行为型模式
- Java_23种设计模式(一)
- java_23种设计模式之策略模式
- java_23种设计模式之代理模式
- java_23种设计模式之多例模式
- java_23种设计模式之门面模式
- java_23种设计模式之适配器模式
- Java_23种经典设计模式详解
- java_23种设计模式之单例模式
- java_23种设计模式之工厂方法模式
- java_23种设计模式之抽象工厂模式
- java_23种设计模式之模板方法模式
- java_23种设计模式之建造者模式
- 设计模式(二) 创建型模式
- 设计模式中创建型模式 (二):原型模式
- (二)设计模式之创建型
- spring+springMVC+hibernate整合
- CentOS7 Hadoop-2.7.4 分布式部署
- javaScript运算符
- js中的string.format
- 记一次偶然遇到mysql的max_connection_errors错误
- Java_23种设计模式(二)----- 创建型模式
- php
- 关于场地营销的一些思考
- Spring COC TypeConverter
- Collections五种返回集合的特性分析
- Mantis1.2.19 在Windows 平台上的安装配置详解
- 进程与线程
- linux下,使用svn commit提交时,提示无法使用外部编辑器获得日志信息
- JavaScript流程控制