简单工厂模式概述和使用
package cn.itcast_01;public abstract class Animal { public abstract void eat();}
package cn.itcast_01;public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); }}
package cn.itcast_01;public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃肉"); }}
package cn.itcast_01;public class AnimalFactory { private AnimalFactory() { } // public static Dog createDog() { // return new Dog(); // } // // public static Cat createCat() { // return new Cat(); // } public static Animal createAnimal(String type) { if ("dog".equals(type)) { return new Dog(); } else if ("cat".equals(type)) { return new Cat(); } else { return null; } }}
package cn.itcast_01;public class AnimalDemo { public static void main(String[] args) { // 具体类调用 Dog d = new Dog(); d.eat(); Cat c = new Cat(); c.eat(); System.out.println("------------"); // 工厂有了后,通过工厂给造 // Dog dd = AnimalFactory.createDog(); // Cat cc = AnimalFactory.createCat(); // dd.eat(); // cc.eat(); // System.out.println("------------"); // 工厂改进后 Animal a = AnimalFactory.createAnimal("dog"); a.eat(); a = AnimalFactory.createAnimal("cat"); a.eat(); // NullPointerException a = AnimalFactory.createAnimal("pig"); if (a != null) { a.eat(); } else { System.out.println("对不起,暂时不提供这种动物"); } }}
工厂方法模式的概述和使用
package cn.itcast_02;public abstract class Animal { public abstract void eat();}
package cn.itcast_02;public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); }}
package cn.itcast_02;public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃肉"); }}
package cn.itcast_02;public interface Factory { public abstract Animal createAnimal();}
package cn.itcast_02;public class CatFactory implements Factory { @Override public Animal createAnimal() { return new Cat(); }}
package cn.itcast_02;public class DogFactory implements Factory { @Override public Animal createAnimal() { return new Dog(); }}
package cn.itcast_02;public class AnimalDemo { public static void main(String[] args) { // 需求:我要买只狗 Factory f = new DogFactory(); Animal a = f.createAnimal(); a.eat(); System.out.println("-------"); //需求:我要买只猫 f = new CatFactory(); a = f.createAnimal(); a.eat(); }}
单例模式之饿汉士
package cn.itcast_03;public class Student { // 构造私有 private Student() { } // 自己造一个 // 静态方法只能访问静态成员变量,加静态 // 为了不让外界直接访问修改这个值,加private private static Student s = new Student(); // 提供公共的访问方式 // 为了保证外界能够直接使用该方法,加静态 public static Student getStudent() { return s; }}
package cn.itcast_03;/* * 单例模式:保证类在内存中只有一个对象。 * * 如何保证类在内存中只有一个对象呢? * A:把构造方法私有 * B:在成员位置自己创建一个对象 * C:通过一个公共的方法提供访问 */public class StudentDemo { public static void main(String[] args) { // Student s1 = new Student(); // Student s2 = new Student(); // System.out.println(s1 == s2); // false // 通过单例如何得到对象呢? // Student.s = null; Student s1 = Student.getStudent(); Student s2 = Student.getStudent(); System.out.println(s1 == s2); System.out.println(s1); // null,cn.itcast_03.Student@175078b System.out.println(s2);// null,cn.itcast_03.Student@175078b }}
设计模式之懒汉式
package cn.itcast_03;/* * 单例模式: * 饿汉式:类一加载就创建对象 * 懒汉式:用的时候,才去创建对象 * * 面试题:单例模式的思想是什么?请写一个代码体现。 * * 开发:饿汉式(是不会出问题的单例模式) * 面试:懒汉式(可能会出问题的单例模式) * A:懒加载(延迟加载) * B:线程安全问题 * a:是否多线程环境 是 * b:是否有共享数据 是 * c:是否有多条语句操作共享数据 是 */public class Teacher { private Teacher() { } private static Teacher t = null; public synchronized static Teacher getTeacher() { // t1,t2,t3 if (t == null) { //t1,t2,t3 t = new Teacher(); } return t; }}
package cn.itcast_03;public class TeacherDemo { public static void main(String[] args) { Teacher t1 = Teacher.getTeacher(); Teacher t2 = Teacher.getTeacher(); System.out.println(t1 == t2); System.out.println(t1); // cn.itcast_03.Teacher@175078b System.out.println(t2);// cn.itcast_03.Teacher@175078b }}
单例模式的java代码体现Runtime类
package cn.itcast_03;import java.io.IOException;/* * Runtime:每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。 * exec(String command) */public class RuntimeDemo { public static void main(String[] args) throws IOException { Runtime r = Runtime.getRuntime();// r.exec("winmine"); // r.exec("notepad"); // r.exec("calc");// r.exec("shutdown -s -t 10000"); r.exec("shutdown -a"); }}/* * class Runtime { * private Runtime() {} * private static Runtime currentRuntime = new Runtime(); * public static Runtime getRuntime() { * return currentRuntime; * } * } */
模版设计模式的概述和使用
package cn.itcast_01;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public abstract class GetTime { // 需求:请给我计算出一段代码的运行时间 public long getTime() { long start = System.currentTimeMillis(); // for循环 // for (int x = 0; x < 10000; x++) { // System.out.println(x); // } // 视频 // try { // BufferedInputStream bis = new BufferedInputStream( // new FileInputStream("a.avi")); // BufferedOutputStream bos = new BufferedOutputStream( // new FileOutputStream("b.avi")); // byte[] bys = new byte[1024]; // int len = 0; // while ((len = bis.read(bys)) != -1) { // bos.write(bys, 0, len); // } // bos.close(); // bis.close(); // } catch (IOException e) { // e.printStackTrace(); // } // 再给我测试一个代码:集合操作的,多线程操作,常用API操作的等等... code(); long end = System.currentTimeMillis(); return end - start; } public abstract void code();}
package cn.itcast_01;public class ForDemo extends GetTime { @Override public void code() { for (int x = 0; x < 100000; x++) { System.out.println(x); } }}
package cn.itcast_01;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class IODemo extends GetTime{ @Override public void code() { try { BufferedInputStream bis = new BufferedInputStream( new FileInputStream("a.avi")); BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream("b.avi")); byte[] bys = new byte[1024]; int len = 0; while ((len = bis.read(bys)) != -1) { bos.write(bys, 0, len); } bos.close(); bis.close(); } catch (IOException e) { e.printStackTrace(); } } }
package cn.itcast_01;public class GetTimeDemo { public static void main(String[] args) { // GetTime gt = new GetTime(); // System.out.println(gt.getTime() + "毫秒"); GetTime gt = new ForDemo(); System.out.println(gt.getTime() + "毫秒"); gt = new IODemo(); System.out.println(gt.getTime() + "毫秒"); }}
装饰模式概述和使用
package cn.itcast_02;public interface Phone { public abstract void call();}
package cn.itcast_02;public class IPhone implements Phone { @Override public void call() { System.out.println("手机可以打电话了"); }}
package cn.itcast_02;public abstract class PhoneDecorate implements Phone { private Phone p; public PhoneDecorate(Phone p) { this.p = p; } @Override public void call() { this.p.call(); }}
package cn.itcast_02;public class RingPhoneDecorate extends PhoneDecorate { public RingPhoneDecorate(Phone p) { super(p); } @Override public void call() { System.out.println("手机可以听彩铃"); super.call(); }}
package cn.itcast_02;public class MusicPhoneDecorate extends PhoneDecorate { public MusicPhoneDecorate(Phone p) { super(p); } @Override public void call() { super.call(); System.out.println("手机可以听音乐"); }}
package cn.itcast_02;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.Scanner;public class PhoneDemo { public static void main(String[] args) { Phone p = new IPhone(); p.call(); System.out.println("------------"); // 需求:我想在接电话前,听彩铃 PhoneDecorate pd = new RingPhoneDecorate(p); pd.call(); System.out.println("------------"); // 需求:我想在接电话后,听音乐 pd = new MusicPhoneDecorate(p); pd.call(); System.out.println("------------"); // 需求:我要想手机在接前听彩铃,接后听音乐 // 自己提供装饰类,在打电话前听彩铃,打电话后听音乐 pd = new RingPhoneDecorate(new MusicPhoneDecorate(p)); pd.call(); System.out.println("----------"); // 想想我们在IO流中的使用 // InputStream is = System.in; // InputStreamReader isr = new InputStreamReader(is); // BufferedReader br = new BufferedReader(isr); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter((new OutputStreamWriter( System.out))); Scanner sc = new Scanner(System.in); }}