码迷,mamicode.com
首页 > 其他好文 > 详细

一些简单的设计模式

时间:2015-08-07 14:50:20      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

1 工厂方法模式(Factory Method)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。

普通工厂模式

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:

技术分享

interface Sender{
    public void send();
}

class MailSender implements Sender{
    public void send(){
        System.out.println("MailSender");
    }
}

class SmsSender implements Sender{
    public void send(){
        System.out.println("SmsSender");
    }
}

class SenderFactory{
    public Sender produce(String type){
        if ("Mail".equals(type)){
            return new MailSender();
        }
        else if ("Sms".equals(type)){
            return new SmsSender();
        }
        else{
            System.out.println("Please enter a valid type!");
            return null;
        }
    }
}

public class FactoryTest {
    public static void main(String[] args){
        SenderFactory factory = new SenderFactory();
        Sender sender = factory.produce("Mail");
        sender.send();
    }
}

多个工厂方法模式

对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。关系图:
技术分享
工厂类和测试类修改如下:

class SenderFactory{
    public Sender produceMail(){
        return new MailSender();
    }
    public Sender produceSms(){
        return new SmsSender();
    }
}

public class FactoryTest {
    public static void main(String[] args){
        SenderFactory factory = new SenderFactory();
        Sender sender = factory.produceMail();
        sender.send();
    }
}

静态工厂方法模式

将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
工厂类和测试类修改如下:

class SenderFactory{
    public static Sender produceMail(){
        return new MailSender();
    }
    public static Sender produceSms(){
        return new SmsSender();
    }
}

public class FactoryTest {
    public static void main(String[] args){
        Sender sender = SenderFactory.produceMail();
        sender.send();
    }
}

2 抽象工厂模式(Abstract Factory)

提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。
技术分享

interface Sender{
    public void send();
}

class MailSender implements Sender{
    public void send(){
        System.out.println("MailSender");
    }
}

class SmsSender implements Sender{
    public void send(){
        System.out.println("SmsSender");
    }
}

interface Provider{
    public Sender produce();
}

class SendMailFactory implements Provider{
    public Sender produce(){
        return new MailSender();
    }
}

class SendSmsFactory implements Provider{
    public Sender produce(){
        return new SmsSender();
    }
}

public class FactoryTest {
    public static void main(String[] args){
        Provider provider = new SendMailFactory();
        Sender sender = provider.produce();
        sender.send();
    }
}

3 单例模式(Singleton)

保证在应用程序中,一个类Class只有一个实例存在。并提供全局访问。

public class Singleton {
    private static Singleton instance = null;
    private Singleton(){

    }

    public synchronized void syncInit(){
        if (instance == null){
            instance = new Singleton();
        }
    }

    public Singleton getInstance(){
        if (instance == null){
            syncInit();
        }
        return instance;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

一些简单的设计模式

标签:

原文地址:http://blog.csdn.net/foreverling/article/details/46845433

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!