设计模式
设计模式是在大量的实践中总结和理论化后优选的代码结构、编程风格、以及解决问题的思考方式。
单例模式(singleton)
- 饿汉式
class SingletonTest {
private static SingletonTest instance = new SingletonTest();
private SingletonTest() {
}
public static SingletonTest getInstance() {
return instance;
}
}
2.懒汉式
dcl失效问题通过volatile解决
class Singleton {
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 此处使用一个内部类来维护单例 */
private static class SingletonFactory {
private static Singleton instance = new Singleton();
}
/* 获取实例 */
public static Singleton getInstance() {
return SingletonFactory.instance;
}
}
代理模式(proxy)
工厂模式
- 工厂方法模式—-普通工厂模式
建立一个工厂类,对实现了同一个接口的一些类进行实例的创建
//接口
public interface sender {
public void sender();
}
//邮件实现类
public class MailSender implements sender {
@Override
public void sender() {
System.out.println("发送邮件");
}
}
//短信实现类
public class SmsSender implements sender {
@Override
public void sender() {
System.out.println("发送短信");
}
}
//工厂类
public class Factory {
public sender produce(String type){
if(type.equals("sms")){
return new SmsSender();
}
else if(type.equals("mail")){
return new MailSender();
}
else{
System.out.println("请录入正确的类型");
return null;
}
}
}
//根据传入的type生产
public static void main(String[] args) {
Factory f = new Factory();
sender s = f.produce("sms");
s.sender();
}
- 工厂方法模式—-多个工厂方法模式
提供多个工厂方法,分别创建对象。
只修改工厂类
public class Factory {
public sender produceMile(){
return new MailSender();
}
public sender produceSms(){
return new SmsSender();
}
- 工厂方法模式—-静态工厂方式模式
public class Factory{
public static sender produceMile(){
return new MailSender();
}
public static sender produceSms(){
return new SmsSender();
}
}
- 抽象工厂模式
对工厂类进行抽象,创建多个工厂类
public interface Provider {
public Sender produce();
}
public class SendMailFactory implements Provider {
@Override
public Sender produce(){
return new MailSender();
}
}
public class SendSmsFactory implements Provider{
@Override
public Sender produce() {
return new SmsSender();
}
}