设计模式(2)
来源:互联网 发布:java中逻辑或 编辑:程序博客网 时间:2024/05/30 23:01
工厂模式:定义了一个创建对象的接口,但由子类决定要实现实例化的类是哪一个,工厂方法让类把实例化推迟到子类。
1、所有的工厂都是用来封装对象的创建。
2、工厂方法使用继承:把对象的创建委托给子类,子类实现工厂方法来创建对象。
3、抽象工厂方法使用对象组合:对象的创建被实现在工厂接口所暴露出来的方法中。
4、抽象工厂创建相关的对象家族,而不需要依赖他们的具体类。
5、依赖倒置原则,指导我们避免依赖具体类型,而要尽量依赖抽象。
public class MailSend implements Sender { public void Send() { System.out.println("send a mail"); }}public interface Sender { public void Send();}public class SendFactory { public Sender produce(String type) { if ("mail".equals(type)) { return new MailSend(); } else if ("sms".contains(type)) { return new SmsSend(); } else { System.out.print("请输入正确的类型"); return null; } } public Sender SenderMail(){ return new MailSend(); } public Sender SenderSms(){ return new SmsSend(); }}public class SmsSend implements Sender { public void Send() { System.out.println("send a sms"); }}public class TestFactoryDemo { @Test public void singleFantoryDemo() { SendFactory sf = new SendFactory(); Sender sender = sf.produce("sms"); sender.Send(); } @Test public void doubleFactoryDemo() { SendFactory sf = new SendFactory(); Sender sender = sf.SenderMail(); sender.Send(); }}
单件模式:确保一个类只有一个实例,并提供一个全局访问点。
1、确保一个类最多一个实例。
2、实现单例模式需要私有的构造器、一个静态方法和一个静态变量。
3、解决多线程的问题。
public class TestSingleDemo { @Test public void Test1() { Single s1 = Single.getInstance(); Single s2 = Single.getInstance(); s1.setNum(10); System.out.println("s2.getNum():" + s2.getNum()); // Single s3 = new Single(); // Single s4 = new Single(); // s3.setNum(10); // System.out.println("s4.getNum():" + s4.getNum()); } @Test public void Test2() { Single1 s1 = Single1.getInstance(); Single1 s2 = Single1.getInstance(); s1.setNum(10); System.out.println("s2.getNum():" + s2.getNum()); }}/** * @Description:饿汉式,先初始化对象 */class Single1 { private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; } // 1.将构造函数私有化 private Single1() { System.out.println("对象建立"); } // 2.在类中创建本类对象 private static Single1 s = new Single1(); // 3.提供一个方法可以获取该对象 public static Single1 getInstance() { System.out.println("饿汉式,先初始化对象"); return s; }}/** * @Description:懒汉式,方法被调用时才初始化,延时加载 */class Single { private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; } // 1.将构造函数私有化 private Single() { System.out.println("对象建立"); } // 2.在类中创建本类对象 private static Single s = null; // 3.提供一个方法可以获取该对象 public static Single getInstance() { if (null == s) System.out.println("懒汉式延迟加载"); s = new Single(); return s; }}
阅读全文
0 0
- 设计模式(2): 什么是设计模式
- 设计模式:2)策略设计模式
- 设计模式(2)
- 设计模式(2)
- 设计模式(2)
- 设计模式(2)
- 设计模式(2)
- 设计模式--工厂设计(2)
- 设计模式-2-观察者模式(2)
- 设计模式2(工厂模式)
- 设计模式(2)-简单工厂模式
- 设计模式(策略模式2)
- 设计模式(2):工厂方法模式
- java设计模式(2)--工厂模式
- 设计模式之工厂模式(2)
- 设计模式(2):工厂方法模式
- 设计模式(2):工厂方法模式
- Android设计模式(2)-----观察者模式
- 操作系统(四)同步互斥机制&管程&进程间通信
- [leetcode]3. Longest Substring Without Repeating Characters
- Redis笔记
- I2C的传输速率由什么决定
- Redis LRU
- 设计模式(2)
- BZOJ2521: [Shoi2010]最小生成树
- 最小公倍数
- 152. Maximum Product Subarray
- liunx的awk命令
- Java Web中前台与后台传递参数小结
- BeaEngine反汇编引擎在C中的使用
- script三种加载方式
- 常用git 命令