java面向对象与设计模式(二)

第一式 外观模式
定义:为子系统的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这一接口使得这一子系统更加容易使用。
优点:松散耦合 简单易用 更好地划分访问的层次
缺点:不应过度使用
本质:封装交互 简单调用

public interface testA {

    public void test();

}

public interface testB {

    public void test();

}

public interface testC {

    public void test();

}

public class concreteTestA implements testA {

    @Override
    public void test() {
        // TODO Auto-generated method stub
        System.out.println("test A");
    }

}

public class concreteTestB implements testB {

    @Override
    public void test() {
        // TODO Auto-generated method stub
        System.out.println("test B");
    }

}

public class concreteTestC implements testC {

    @Override
    public void test() {
        // TODO Auto-generated method stub
        System.out.println("test C");
    }

}

public class facade {

    public void test() {

        testA ta = new concreteTestA();
        ta.test();
        testB tb = new concreteTestB();
        tb.test();
        testC tc = new concreteTestC();
        tc.test();

    }

}

public class user {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        facade fc = new facade();
        fc.test();

    }

}

第二式 适配器模式
定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
优点:更好地复用性 更好地可扩展性
缺点:使用过多,会使系统更加凌乱,不容易整体进行把握
本质:转换匹配 复用功能

public interface target {

    public void request();

}

public class adaptee {

    public void request() {

        System.out.println("adaptee test");

    }

}

public class adapter implements target {

    adaptee apt = null;

    public adapter(adaptee apt) {
        this.apt = apt;
    }

    @Override
    public void request() {
        // TODO Auto-generated method stub
        apt.request();
    }

}

public class user {

    public static void main(String[] args) {

        adaptee adp = new adaptee();
        target tar = new adapter(adp);
        tar.request();

    }

}

第三式 单例模式

定义:保证一个类仅有一个实例,并提供一个访问他的全局访问点。

懒汉式是时间换空间,饿汉式是空间换时间。在线程安全方面,不加同步的懒汉式是线程不安全的,而饿汉式则是线程安全的。单例模式的实质在于控制实例数目,而在集群中使用单例模式则需要注意安全问题。

推广:缓存的实现--空间换时间。

懒汉式:

public class singleton {

    private static singleton instance = null;

    private singleton() {

    }

    public static singleton getInstance() {

        if (instance == null) {

            instance = new singleton();

        }

        return instance;

    }

}

饿汉式:

public class singleton {

    private static singleton instance = new singleton();

    private singleton() {

    }

    public static singleton getInstance() {

        return instance;

    }

}

缓存的基本实现

public class javaCache {

    private static Map<String, Object> instance = null;

    public Object getInstance(String key) {

        Object object = instance.get(key);

        if (object == null) {

            object = key + ", value";
            instance.put(key, object);

        }

        return object;

    }

}

枚举类型也是实现单例模式的一种选择。另外,还可以通过一种类级内部类的方式来实现单例模式。

public class singleton {

    private static class instanceHolder {

        private static singleton instance = new singleton(); 

    }

    private singleton() {

    }

    public static singleton getInstance() {

        return instanceHolder.instance;

    }

}

这里需要解释补充一下:类级内部类

-类级内部类就是由static修饰的成员式内部类,没有static修饰的称为对象式内部类。

-类级内部类可以直接创建,而对象级内部类需要绑定在外部类的成员变量上。

-类级内部类可以实现静态方法,静态方法可以用外部类的静态方法和静态成员变量。

-类级内部类相当与外部类的成员,因此在第一次使用的时候加载。

安全问题:

JVM在下列情况自动实现了同步

-静态初始化器初始化数据时

-访问final字段时

-在创建线程之前创建对象时

-线程可以看到它将要处理的对象时

因此,利用类级内部类来实现延迟加载,通过JVM自身来保证线程安全则是实现的基本思路。

时间: 2024-08-07 16:48:44

java面向对象与设计模式(二)的相关文章

【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder

[喵"的Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder 1.String String是Java中的一个final类,主要用于字符串的处理. 1.1 不可变性 String内的字符串是不可变的,每一次修改都会重新生成一个新的String对象实例. 例: 1 // 在堆中会创建一个"Hello"字符串实例,把地址赋给对象a 2 String a = new String("Hello&

Java——面向对象的特征二:继承性

2.1面向对象的特征二:继承性 ①引入类继承最基本的作用是:代码重用. ②语法 [修饰符列表] class 子类名 extends 父类名{ 类体; } ③子类继承父类以后,父类中声明的属性.方法,子类就可以获取到. 明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使得子类不可以直接调用罢了,但是可以间接访问.子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分.构造方法无法被子类继承. extends:子类是对父类功能的“扩展”,明确子类不是父类的子

黑马程序员-Java面向对象上《二》

                         ------- android培训.java培训.期待与您交流! ---------- 1.面向对象的设计思想  面向过程:是以一个流程为单位,考虑它的实现方法,关心的是它的功能实现. 面向对象:是以具体事物为单位,考虑它的属性(特征)和动作(行为). 2.面向对象思考问题的方式 有哪些对象? 对象有什么特征和功能? 对象之间的关系? 3.类和对象 3.1,面向对象的编程思想:是力图使计算机语言中对事物的描述尽可能的与现实中的该事物的本来面目一致

黑马程序员-Java面向对象下《二》

                         ------- android培训.java培训.期待与您交流! ---------- 1.继承的概念 面向对象的特点之一,可以实现对类的复用.可以通过以下两种方法实现 a.合成/聚合关系(包含其他类):将一个类当作另一个类的属性. b.派生类:一个类继承另一个类,实现继承的类称为派生类,被继承类称为父类,基类,超类. 父类的成员方法和成员变量被子类继承,但是父类的构造方法没有被继承. 在Java中只支持单继承,和C++多继承不一样. 2.sup

java面向对象与设计模式(一)

设计原则:SOLID 可以说,五个设计原则各司其职.单一职责原则(S):用于类的设计开闭原则(O):总的指导思想里氏替换原则(L):用于指导类继承的设计接口隔离原则(I):用于指导接口的设计依赖翻转原则(D):用于指导如何抽象 类之间的关系:继承=实现>组合>聚合>关联>依赖 UML表现:继承:带三角箭头的实线,箭头指向父类 实现:带三角箭头的虚线,箭头指向接口 组合:带实心菱形的实线,菱形指向整体 聚合:带空心菱形的实线,菱形指向整体 关联:带普通箭头的实线,指向被拥有者 依赖:

java面向对象与设计模式(四)

第五式 抽象工厂模式 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类.(创建的对象之间有约束) 抽象工厂模式的本质:选择产品簇的实现 优点:分离接口和产品簇,使得切换产品簇变得容易 缺点:不太容易扩展新的产品,容易造成类层次复杂 工厂方法模式一般用在产品之间没有联系的单个产品,而抽象方法模式一般用在产品之间有联系的时候.

java面向对象与设计模式(三)

第四式 工厂方法模式定义:定义一个用于创建对象的接口,让子类决定实例化那一个类,对象工厂模式使一个类的实例化延迟到子类.优点:可以在不知具体实现的情况下编程:更容易扩展对象的新版本:连接平行的类层次.缺点:具体产品对象和工厂方法的耦合性.本质:延迟到子类的选择实现. public interface product { public void createProduct(); } public class concreteProduct implements product { @Overrid

20165308 实验二 Java面向对象程序设计

20165308 实验二 Java面向对象程序设计 实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:张士洋 学号:20165308 指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:15:35 - 17:15 实验序号:实验二 实验名称:Java面向对象程序设计 实验内容及要求: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验内容.步骤与体会 目

20165230 《Java程序设计》实验二(Java开发环境的熟悉)实验报告

20165230 <Java程序设计>实验二(Java开发环境的熟悉)实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:15:45 - 17:20 实验序号:实验二 实验名称:Java面向对象程序设计 实验内容: 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求: 没有Linux