【Java基础之设计模式】代码库(三)

来源:互联网 发布:软件简介怎么写 编辑:程序博客网 时间:2024/06/05 11:30

抽象工厂模式.java

//抽象工厂public abstract class AbstractFactory {    public abstract Vehicle create();    public abstract Weapon create();    public abstract Food create();}//工厂public class Factory extends AbstractFactory {    @Override    public Vehicle create() {        return new RangeRover();    }    @Override    public Weapon create() {        return new AK47();    }    @Override     public Food create() {        return new Apple();    }}//测试public class Test {    public static void main(String[] args) {        AbstractFactory abf = new Factory();        //产品一        Vehicle v = abf.create();        v.run();        //产品二        Weapon w = abf.create();        w.fire();        //产品三        Food f = abf.create();        f.price();    }}

单例模式.java

//懒汉式public class Singleton {    private static Singleton instance = null;    //私有构造函数    private Singleton() {    }    public static synchronized getInstance() {        if (instance == null)             instance = new Singleton();        return instance;    }}//饿汉式public class Singleton {    private static final Singleton instance = new Singleton();    private Singleton() {    }    public static Singleton getInstance() {        return instance;    }}

工厂方法模式.java

//抽象产品角色public interface Moveable {    void run();}//具体产品角色public class Plane implements Moveable {    @Override    public void run() {        System.out.println("飞机飞起来了!");    }}public class Car implements Moveable {    @Override    public void run() {        System.out.println("汽车开起来了!");    }}//抽象工厂public abstract class Factory {    abstract Moveable create();}//工厂public class PlaneFactory extends Factory {    public Moveable create() {        return new Plane();    }}public class CarFactory extends Factory {    public Moveable create() {        return new Car();    }}//测试public class Test {    public static void main(String[] args) {        Factory fac = new CarFactory();        Moveable car = fac.create();        car.run();    }}

观察者模式.java

//抽象观察者public interface Watcher {    public void update(String str);}//抽象主题角色(被观察者)public interface Watched {    public void addWatcher(Watcher watcher);    public void removeWatcher(Watcher watcher);    public void notifyWatchers(String str);}//观察者public class ConcreteWatcher implements Watcher {    @Override     public void update(String str) {        System.out.println(str);    }}//主题角色public class ConcreteWatched implements Watched {    private List<Watcher> list = new ArrayList<>();    @Override    public void addWatcher(Watcher watcher) {        list.add(watcher);    }    @Override    public void removeWatcher(Watcher watcher) {        list.remove(watcher);    }    @Override    public void notifyWatchers(String str) {        for (Watcher watcher : list) {            watcher.update(str);        }    }}//测试public class Test {    public static void main(String[] args) {        Watched girl = new ConcreteWatched();        Watcher boy1 = new ConcreteWatcher();        Watcher boy2 = new ConcreteWatcher();        Watched boy3 = new ConcreteWatcher();        //注册        girl.addWatcher(boy1);        girl.addWatcher(boy2);        girl.addWatcher(boy3);        girl.notifyWatchers("我美不美?");    }}