A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小刀葛小伦 于 2019-9-12 14:25 编辑

一.设计模式-单例模式1.懒汉单例模式
[Java] 纯文本查看 复制代码
public class LazySingleton {
    //保证 instance 在所有线程中同步
    private static volatile LazySingleton instance=null;
    //避免类在外部被实例化
    private LazySingleton(){}

    public static synchronized LazySingleton getInstance() {
        //getInstance 方法前加同步
        if(instance==null) {
            instance=new LazySingleton();
        }
        return instance;
    }
}

2.饿汉单例模式
[Java] 纯文本查看 复制代码
public class HungrySingleton {
    private static final HungrySingleton instance=new HungrySingleton();
    private HungrySingleton(){}
    public static HungrySingleton getInstance()
    {
        return instance;
    }
}

二.设计模式-装饰模式
1.统一的接口:
[Java] 纯文本查看 复制代码
    public abstract class Component {
        /**
         * 基本的操作类
         */
        public abstract void opeartion();
    }

2.其中的一个拓展实现类,作为一个拓展的功能类
[Java] 纯文本查看 复制代码
    public class ConcreteComponent extends Component {
        @Override
        public void opeartion() {
            System.out.println("具体对象的操作");
        }
    }

3.另一个拓展的功能类
[Java] 纯文本查看 复制代码
    @Setter
    public class Decorator extends Component{
        private Componentcomponent;
        @Override
        public void opeartion() {
            if (component !=null){
                component.opeartion();
            }
        }
    }

4.操作类A
[Java] 纯文本查看 复制代码
    public class ConcreteDecoratorA extends Decorator {
        private StringaddedState;
        @Override
        public void opeartion() {
            super.opeartion();
            addedState ="New State";
            System.out.println("具体的装饰对象A的操作");
        }
    }

5.操作类B
[Java] 纯文本查看 复制代码
    public class ConcreteDecoratorB extends Decorator {
        @Override
        public void opeartion() {
            super.opeartion();
            AddedBehavior();
            System.out.println("具体装饰对象B的操作");
        }
        private void AddedBehavior(){
            System.out.println("装饰B独有的方法");
        }

    }

6.测试用例
[Java] 纯文本查看 复制代码
    public class Test {
        public static void main(String[] args) {
            ConcreteComponent component =new ConcreteComponent();
            ConcreteDecoratorA decoratorA =new ConcreteDecoratorA();
            ConcreteDecoratorB decoratorB =new ConcreteDecoratorB();
            decoratorA.setComponent(component);
            decoratorB.setComponent(decoratorA);
            decoratorB.opeartion();
        }
    }






0 个回复

您需要登录后才可以回帖 登录 | 加入黑马