工厂模式、单例模式和观察者模式

本文深入探讨了三种经典的设计模式:工厂方法模式用于创建对象,确保灵活性;线程安全的单例模式确保系统中只有一个实例,避免资源浪费;观察者模式则实现了发布/订阅机制,实现对象间的松耦合通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、工厂方法模式

/**
 * 工厂方法模式
 */
public interface FactoryMethod {
    public Product create();
}

class FactoryA implements FactoryMethod{
    @Override
    public Product create() {
        return new ProductA();
    }
}

class FactoryB implements FactoryMethod{
    @Override
    public Product create() {
        return new ProductB();
    }
}

class FactoryMethodTest{
    public static void main(String[] args){
        new FactoryA().create();
        new FactoryB().create();
    }
}

2、线程安全的单例模式

/**
 * 线程安全的单例模式
 */
public class SingleTon {

    private SingleTon(){}

    private static SingleTon singleton = null;

    public static  SingleTon create(){
            if(singleton != null){
                return singleton;
            }else{
                synchronized (SingleTon.class) {
                    return new SingleTon();
                }
            }
    }
}

3、观察者模式(发布/订阅模式)

/**
 * 发布/订阅模式
 */
public class SubjectObserver {

    class Subject{
        List<Observer> observerList = new ArrayList<Observer>();

        void addObserver(Observer observer){
            observerList.add(observer);
        }
        void deleteObserver(Observer observer){
            Iterator<Observer> observers = observerList.iterator();
            while (observers.hasNext()){
                if(observer==observers.next()){
                    observers.remove();
                }
            }
        }
        void update(String something){
            Iterator<Observer> observers = observerList.iterator();
            while (observers.hasNext()){
                observers.next().show(something);
            }
        }
    }

    class Observer{
        String name;
        Observer(String name){
            this.name = name;
        }
        void show(String something){
            System.out.println(name+"得到了通知:"+something);
        }
    }
    public static void main(String args[]){
        SubjectObserver so = new SubjectObserver();
        Subject subject = so.new Subject();
        Observer observer1 = so.new Observer("A");
        Observer observer2 = so.new Observer("B");
        Observer observer3 = so.new Observer("C");
        subject.addObserver(observer1);
        subject.addObserver(observer2);
        subject.addObserver(observer3);
        subject.deleteObserver(observer1);
        subject.update("明天要下雨");
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值