设计模式

2019-06-13  本文已影响0人  大盗海洲

简单工厂模式

 //抽象产品
    public abstract class Computer {
        /**
         * 产品的抽象方法,有具体的产品类实现
         */
        public abstract void start();
    }

 //具体的产品
    public class LenovoComputer extends Computer {

        @Override
        public void start() {
            System.out.println("联想计算机启动");
        }
    }

    public class HpComputer extends Computer {

        @Override
        public void start() {
            System.out.println("惠普计算机启动");
        }
    }

    public class AsusComputer extends Computer {

        @Override
        public void start() {
            System.out.println("华硕计算机启动");
        }
    }


public  class ComputerFactory {
    //工厂类
    public static Computer createComputer(String type) {
        switch (type) {
            case "lenovo":
                return new LenovoComputer();
            case "hp":
                return new HpComputer();
            case "asus":
                return new AsusComputer();

        }
        return null;
    }
}

测试

 @Test
 public void test(){
 Computer computer = ComputerFactory.createComputer("lenovo");
 computer.start();
}

locat

联想计算机启动

代理模式的简单实现

//抽象主题
public interface IShop {
    void buy();
}

//真实的主题
public class Man  implements IShop {

    @Override
    public void buy() {
        System.out.println("购买");
    }
}

//代理类
public class PurchingProxy implements IShop {
    private IShop mShop;
    public PurchingProxy(IShop mShop) {
        this.mShop = mShop;
    }

    @Override
    public void buy() {
        mShop.buy();
    }
}

测试

    @Test
    public void test2(){
        IShop man = new Man();
        IShop proxy = new PurchingProxy(man);
        proxy.buy();
    }

动态代理模式

public class DynamicPurchasing implements InvocationHandler {
    private Object object;

    public DynamicPurchasing(Object object) {
        this.object = object;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object resut = method.invoke(object, args);
        if (method.getName().equals("buy")){
            System.out.println("DynamicPurchasing,buy");
        }
        return resut;
    }
}

测试

  @Test
    public void test3(){
        IShop man = new Man();
        DynamicPurchasing dynamicPurchasing = new DynamicPurchasing(man);
        ClassLoader classLoader = man.getClass().getClassLoader();
        IShop purchasing= (IShop) Proxy.newProxyInstance(classLoader, new Class[]{IShop.class}, dynamicPurchasing);
        purchasing.buy();
    }

locat

购买
DynamicPurchasing,buy

观察者模式


//抽象观察者
public interface Observer {
    public void update(String message);
}


//具体的观察者
public class WeixinUser implements Observer {
    private String username;

    public WeixinUser(String username) {
        this.username = username;
    }

    @Override
    public void update(String message) {
        System.out.println(username+ " - "+message);

    }
}


public interface Subject {
    /**
     * 增加订阅者
     * @param observer
     */
    public void attach(Observer observer);

    /**
     * 删除订阅者
     * @param observer
     */
    public void detach(Observer observer);

    /**
     * 通知订阅者更新消息
     * @param message
     */
    public void notify(String message);
}




//具体被观察者
public class SubScriptionSubject implements Subject {

    private List<Observer> weixinUserList = new ArrayList<>();

    @Override
    public void attach(Observer observer) {
        weixinUserList.add(observer);
    }

    @Override
    public void detach(Observer observer) {
        weixinUserList.remove(observer);
    }

    @Override
    public void notify(String message) {
        for (Observer observer : weixinUserList) {
            observer.update(message);
        }
    }
}

测试


    @Test
    public void test4(){
        SubScriptionSubject subScriptionSubject = new SubScriptionSubject();
        //创建用户
        WeixinUser user1 = new WeixinUser("小米");
        WeixinUser user2 = new WeixinUser("小红");
        WeixinUser user3 = new WeixinUser("小胡");
        //订阅公众号
        subScriptionSubject.attach(user1);
        subScriptionSubject.attach(user2);
        subScriptionSubject.attach(user3);
        //公众号跟新发消息给订阅的微信用户
        subScriptionSubject.notify("王炸的专栏更新了");
    }

logcat

小米 - 王炸的专栏更新了
小红 - 王炸的专栏更新了
小胡 - 王炸的专栏更新了
上一篇 下一篇

猜你喜欢

热点阅读