Loading

工厂模式

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
工厂模式可以分为三类:
1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory)

区别
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
两者皆可。

顶层父类:
public abstract class TwoClass {

    public abstract void Study();
}

老师类继承
public class Teacher extends TwoClass{

    @Override
    public void Study() {
        System.out.println("老师上课");
    }

}
学生类继承
public class Student extends TwoClass{

    @Override
    public void Study() {
        System.out.println("学生上课");
    }

}

工厂类:
public class ClassFactory {
    //无参构造
    public  ClassFactory(){

    }

    //形成老师类学生类
    public static Student CreatStudent(){
        return new Student();
    }
    public static Teacher Creatteacher(){
        return new Teacher();
    }

    //改进的形成类
    public static  TwoClass ClassCreat(String type){
        if("Student".equals(type )){
            return new Student();
        }else if("Teacher".equals(type)){
            return new Teacher();
        }else{
            return null;            
        }
    }

}

测试类:
public class TestDemo {

    public static void main(String[] args) {

        //提供了静态工厂类
        Teacher T1 = ClassFactory.Creatteacher();
        T1.Study();
        Student S1 = ClassFactory.CreatStudent();
        S1.Study();

        System.out.println("---------------");
        //改进的静态工厂类
        TwoClass S2 = ClassFactory.ClassCreat("Student");
        S2.Study();
        TwoClass T2 = ClassFactory.ClassCreat("Teacher");
        T2.Study();


    }

}
输出:
老师上课
学生上课
---------------
学生上课
老师上课

单例模式

单例模式: 在内存中始终只有一个对象
javaweb–Servlet(server applet) ,服务器端进行开发
饿汉式
特点:当前某一个一加载,就会创建一个对象
需要将该类的无参构造私有化
在成员变量创建该类的实例
需要提供公共的访问方法

懒汉式
特点:并不是加载某个类就直接创建对象,而是需要的时候在创建对象
1)懒加载(延迟加载)
2)线程的安全问题
a:是否是多线程环境
b:是否有共享数据
c:是否有多条语句对共享数据进行操作!
使用同步代码块进行解决

“`
老师类:饿汉式
public class Teacher {

//饿汉式,每创建一个变量就产生一个对象
//私有创建类
private Teacher() {
}

//在成员变量的位置创建该类的实例
    //静态只能访问静态,所以需要加上静态修饰
    //为了不让外界修改当前这个实例,所以加入private修饰
private static Teacher T = new Teacher() ;

//提供公共访问方法,返回值是该类实例对象
public static Teacher getTeacher(){
    return T;

}

学生类:懒汉式
public class Student {

private Student(){

}
//懒汉式,在需要对象的时候才产生对象
//在成员变量位置声明变量
    private static Student s= null ; //共享数据

///静态只能访问静态,所以需要加上静态修饰  , 私有类修饰,防止外界修改数据
public static Student getStudent(){

    if(s==null){
        s = new Student();
    }
    return s;
}

}

}“`

posted @ 2017-12-29 09:51  AomanHao  阅读(5)  评论(0)    收藏  举报