工厂设计模式
public class Person {
public void sleep(){
System.out.println("人睡觉");
}
}
public class Teacher extends Person{
@Override
public void sleep() {
System.out.println("老师睡觉");
}
}
public class Student extends Person{
@Override
public void sleep() {
System.out.println("学生睡觉");
}
}
config.properties
person=com.factory.Teacher
public class Factory {
public static Person createPerson(){
Person person=null;
Properties p=new Properties();
try {
p.load(new FileInputStream("config.properties"));
String clazzName=p.getProperty("person");
Class clazz=Class.forName(clazzName);
person=(Person) clazz.newInstance();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return person;
}
}
public class FactoryTest {
public static void main(String[] args) {
Person person=Factory.createPerson();
person.sleep();
}
}
反射
public class Student {
public String clazz;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Test {
public static void main(String[] args) {
Class<Student> clazz=Student.class;
Field[] fields=clazz.getDeclaredFields();
for(Field field:fields){
System.out.println(field.getName());
System.out.println(field.getType().getName());
System.out.println(field.getModifiers());
}
Student lisi=new Student();
try {
Field age=clazz.getDeclaredField("age");
age.setAccessible(true);
age.set(lisi, 18);
age.setAccessible(false);
System.out.println(lisi.getAge());
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
线程
public class MyThread extends Thread{
public MyThread(){
}
public MyThread(String name){
super(name);
}
private int ticket=200;
@Override
public void run() {
while(ticket>0){
System.out.println(getName()+"卖出了第"+ticket+"票");
ticket--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Test {
public static void main(String[] args) {
MyThread t1=new MyThread("售票员甲");
MyThread t2=new MyThread("售票员乙");
MyThread t3=new MyThread("售票员丙");
t1.start();
t2.start();
t3.start();
}
}
public class MyRunable implements Runnable{
private int i=100;
private String s="asd";
public void run() {
while(i>0){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (s) {
if(i>0){
System.out.println(Thread.currentThread().getName()+"卖出了第"+i+"票");
i--;
}
}
}
public class Test {
public static void main(String[] args) {
MyRunable runable=new MyRunable();
Thread t1=new Thread(runable,"售票员1");
Thread t2=new Thread(runable,"售票员2");
Thread t3=new Thread(runable,"售票员3");
t1.start();
t2.start();
t3.start();
}
}
public class MyRunable1 implements Runnable{
String lock1="asd";
String lock2="qwe";
@Override
public void run() {
synchronized(lock1){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("我在等LOCK2");
synchronized (lock2) {
}
}
}
public class MyRunable2 implements Runnable{
String lock1="asd";
String lock2="qwe";
@Override
public void run() {
synchronized(lock2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("我在等LOCK1");
synchronized (lock1) {
}
}
}
public class Test {
public static void main(String[] args) {
MyRunable1 run1=new MyRunable1();
MyRunable2 run2=new MyRunable2();
Thread t1=new Thread(run1,"张思");
Thread t2 =new Thread(run2, "李斯");
t1.start();
t2.start();
}
}
注解
public class Teacher {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TeacherAnnotation {
int age() default 19;
String name();
}
public class Clazz {
@TeacherAnnotation(age=20,name="张三")
private Teacher javaTeacher;
@TeacherAnnotation(age=20,name="李斯")
private Teacher englishTeacher;
@TeacherAnnotation(name="王武")
private Teacher mathTeacher;
private int clazzNum;
private String name;
public Clazz(){
Class clazz=Clazz.class;
Field[] fields=clazz.getDeclaredFields();
for(Field field:fields){
TeacherAnnotation ta=field.getAnnotation(TeacherAnnotation.class);
if(ta==null){
continue;
}else{
int age=ta.age();
String name=ta.name();
Teacher teacher=new Teacher();
teacher.setAge(age);
teacher.setName(name);
field.setAccessible(true);
try {
field.set(this, teacher);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
field.setAccessible(false);
}
}
}
public Teacher getJavaTeacher() {
return javaTeacher;
}
public void setJavaTeacher(Teacher javaTeacher) {
this.javaTeacher = javaTeacher;
}
public Teacher getEnglishTeacher() {
return englishTeacher;
}
public void setEnglishTeacher(Teacher englishTeacher) {
this.englishTeacher = englishTeacher;
}
public Teacher getMathTeacher() {
return mathTeacher;
}
public void setMathTeacher(Teacher mathTeacher) {
this.mathTeacher = mathTeacher;
}
}
public class Test {
public static void main(String[] args) {
Clazz clazz=new Clazz();
System.out.println(clazz.getEnglishTeacher().getName());
System.out.println(clazz.getMathTeacher().getAge());
}
}