JavaSE中几种典型的设计模式

这里是JavaSE中几种典型的设计模式,有如下几种:
1. 懒汉式单例—》2.饿汉式单例–》3.模板设计模式—抽象类的实际应用—》4.工厂设计模式–(第三方解耦合)接口类应用—》5.代理设计模式—(两个子类共同实现一个类)接口类应用;

1.懒汉式单例

class Single {
    public static Single single = null;

    private Single() {
    }

    public static Single getInstance() {
        if (single == null) {
            single = new Single();
        }
        return single;
    }

    public void print() {
        System.out.println("Hello world");
    }
}

public class test {
    public static void main(String[] args) {
        Single single = Single.getInstance();
        single.print();
    }
}

2.饿汉式单例

class Single {
    private static Single single = new Single();

    private Single() {
    }

    public static Single getInstance() {
        return single;
    }

    public void print() {
        System.out.println("Hello Single");
    }
}

public class test {
    public static void main(String[] args) {
        Single single = Single.getInstance();
        single.print();
    }
}

3.模板设计模式—抽象类的实际应用


abstract class Action {
    public static final int EAT = 1;
    public static final int SLEEP = 5;
    public static final int WORK = 10;

    public void command(int cmd) {
        switch (cmd) {
        case EAT:
            this.eat();
            break;
        case SLEEP:
            this.sleep();
            break;
        case WORK:
            this.work();
            break;
        case EAT + SLEEP + WORK:
            this.eat();
            this.work();
            this.sleep();
            break;
        }
    }

    public abstract void eat();

    public abstract void sleep();

    public abstract void work();
}

class Person extends Action {

    @Override
    public void eat() {
        System.out.println("人吃饭,吃喜欢的饭");
    }

    @Override
    public void sleep() {
        System.out.println("人睡觉");
    }

    @Override
    public void work() {
        System.out.println("人工作");
    }
}

class Pig extends Action {

    @Override
    public void eat() {
        System.out.println("猪吃饭,吃糠");
    }

    @Override
    public void sleep() {
        System.out.println("猪在睡觉");
    }

    @Override
    public void work() {
        // 猪不需要工作
    }

}

public class test {
    public static void main(String[] args) {
        fun(new Person());
        fun(new Pig());
    }

    public static void fun(Action action) {
        action.command(Action.EAT + Action.SLEEP + Action.WORK);
    }
}

4.工厂设计模式–(第三方解耦合)接口类应用


interface Infruit {
    void eat();
}

class Factory {
    public static Infruit getInstance(String value) {
        if ("apple".equals(value)) {
            return new Apple();
        } else if ("watermelon".equals(value)) {
            return new Watermelon();
        }
        return null;
    }
}

class Apple implements Infruit {

    @Override
    public void eat() {
        System.out.println("i am eating apple");
    }

}

class Watermelon implements Infruit {

    @Override
    public void eat() {
        System.out.println("i am eating Watermelon");
    }

}

public class test {
    public static void main(String[] args) {
        Infruit infruit = Factory.getInstance("watermelon");
        infruit.eat();
    }
}

5.代理设计模式—(两个子类共同实现一个类)接口类应用


interface ISubject {
    void buyComputer();
}

class RealSubject implements ISubject {

    @Override
    public void buyComputer() {
        System.out.println("2.buy a computer");
    }

}

class ProxySubject implements ISubject {
    private ISubject subject;

    public ProxySubject(ISubject subject) {
        this.subject = subject;
    }

    public void producerComputer() {
        System.out.println("1.produer a computer");
    }

    public void afterComputer() {
        System.out.println("3.sale for computer");
    }

    @Override
    public void buyComputer() {
        this.producerComputer();
        this.subject.buyComputer();
        this.afterComputer();
    }

}

class Factor {
    public static ISubject getInstance() {
        return new ProxySubject(new RealSubject());
    }
}

public class test {
    public static void main(String[] args) {
        ISubject subject = Factor.getInstance();
        subject.buyComputer();
    }
}

猜你喜欢

转载自blog.csdn.net/eternal_01/article/details/80949892