8.3 面向对象的设计模式
实例156 Singleton单例模式
public class TestClass { // 单例模式的测试类 public static void main(String[] args) { Singleton object1 = Singleton.getSingleton(); // 调用方法获得实例 Singleton object2 = Singleton.getSingleton(); // 调用方法获得实例 System.out.println("用Singleton类实现单例模式的实例如下:"); System.out.println("调用next()方法前:"); System.out.println("object1.amount=" + object1.getAmount()); System.out.println("object2.amount=" + object2.getAmount()); object1.next(); // 调用方法 System.out.println("\n调用next()方法后:"); System.out.println("object1.amount=" + object1.getAmount()); System.out.println("object2.amount=" + object2.getAmount()); } } class Singleton { private static int amount = 5; // 私有属性 private static Singleton singleton = new Singleton();// Singleton的唯一实例 private Singleton() { // 创建private私有构造函数的目的为防止外界构造Singleton实例 } public static Singleton getSingleton() { // 获取Singleton的实例 return singleton; } public synchronized int getAmount() { // synchronized关键字表示方法是线程同步 return amount; // 任一时刻最多只能有一个线程进入该方法 } public synchronized void next() { // 将amount加1 amount++; } }
实例157 招聘(简单工厂模式)
public class FactoryOne { public static void main(String[] args) { try { Person person = Recruitment.findWork("Middle_Programmer"); // 调用方法返回车的实例 System.out.println("请各位谈谈自己的工作经历好吗?"); person.experience(); // 调用方法开车 } catch (Exception e) { // 捕获异常 System.out.println("招聘的过程中出现了问题,停止招聘"); } finally { // 代码总被执行 System.out.println("......"); } } } class Recruitment { public static Person findWork(String s) throws Exception { if (s.equalsIgnoreCase("Low_Programmer")) { // 判断传入参数返回不同的实现类 return new Low_Programmer(); } else if (s.equalsIgnoreCase("Middle_Programmer")) { return new Middle_Programmer(); } else if (s.equalsIgnoreCase("High_Programmer")) { return new High_Programmer(); } else { throw new Exception(); // 抛出异常 } } } interface Person { public void experience(); // 工作经验 } class Low_Programmer implements Person { // 初级程序员 public void experience() { System.out.println("我刚走出大学校门,目前只有不到一年的工作经验!!"); } } class Middle_Programmer implements Person {// 中级程序员 public void experience() { System.out.println("我已经毕业一年多了,目前有二年多的工作经验!"); } } class High_Programmer implements Person {// 高级程序员 public void experience() { System.out.println("我已经毕业很多年了,目前有五年多的工作经验!"); } }
实例158 同学聚会(工厂方法模式)
package Chapter08; public class FactoryTwo { public static void main(String[] args) { // java程序主入口处 try { Forms form = new ShangHai();// 接口变量引用实现类对象 MeetOfStudents mos = form.place(); // 调用方法返回聚会的实例 System.out.println("今年咱们同学去哪聚会啊?"); mos.form(); // 调用方法获得聚会的方式 } catch (Exception e) { // 捕获异常 System.out.println("今年的同学聚会取消?"); } finally { // 代码总被执行 System.out.println("......"); } } } interface MeetOfStudents {// 聚会的形式 public void form(); } interface Forms {// 聚会的地方 public MeetOfStudents place(); } class Hotels implements MeetOfStudents {// 酒店 public void form() { System.out.println("我们去酒店好好的吃一顿吧!"); } } class Home implements MeetOfStudents {// 个人家里 public void form() { System.out.println("我们还是去谁家好好的聊聊天,吃一顿便饭吧"); } } class Nightclub implements MeetOfStudents {// 夜总会 public void form() { System.out.println("我们还是去夜总会好好的High一次吧,放松一下心情"); } } class QinHuangDao implements Forms {// 秦皇岛 public MeetOfStudents place() { return new Hotels(); } } class ShangHai implements Forms {// 上海 public MeetOfStudents place() { return new Nightclub(); } } class BeiJing implements Forms {// 北京 public MeetOfStudents place() { return new Home(); } }
实例159 图书展(抽象工厂模式)
public class FactoryThree { public static void main(String[] args) { PropertyOfBook garden = ShowBooks.getProperty("计算机型"); // 传入参数调用方法获得实例 Book bookname = garden.getBookName(); // 获取书的名字 Book author = garden.getAuthor(); // 获取书的作者 Book price = garden.getPrice(); // 获取书的价格 System.out.println("书的名字:" + bookname.getName()); System.out.println("书的作者:" + author.getName()); System.out.println("书的价格:" + price.getName()); } } class Book { // 书类 String name; // 书的名称 public Book(String name) { // 带参数的构造方法 this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } abstract class PropertyOfBook { // 书的属性 public abstract Book getAuthor(); // 作者 public abstract Book getPrice(); // 价格 public abstract Book getBookName(); // 书的名字 } class Computer extends PropertyOfBook { // 计算机类的 public Book getAuthor() { return new Book("张三"); } public Book getBookName() { return new Book("Java Web实例大全"); } public Book getPrice() { return new Book("88.00"); } } class English extends PropertyOfBook // 英语类 { public Book getAuthor() { return new Book("张小红"); } public Book getBookName() { return new Book("跟我学英语"); } public Book getPrice() { return new Book("35.8"); } } class Health extends PropertyOfBook // 健康类 { public Book getAuthor() { return new Book("李四"); } public Book getBookName() { return new Book("人类长寿的10个秘密"); } public Book getPrice() { return new Book("66.9"); } } class ShowBooks { // 定义抽象工厂类 private static PropertyOfBook po; public static PropertyOfBook getProperty(String type) { po = new Computer(); // 默认为计算机类 if (type.equals("英语类")) po = new English(); if (type.equals("健康类")) po = new Health(); return po; } }
实例160 汽车适配器(Adapter适配器模式)
public class Adapter { public static void main(String[] args) { Honda honda = new Honda(); // 实例化对象 honda.setColor("red"); // 设置位置 honda.display(); // 显示颜色 honda.move(); // 移动距离 AudiAdapter audi = new AudiAdapter();// 实例化适配器 audi.setColor("black"); // 设置位置 audi.setSpeed(60); audi.display(); // 显示颜色 audi.move(); // 移动距离 } } interface Car { // 定义车接口 public void setColor(String color); // 设置颜色 public String getColor(); // 获得颜色 public void setSpeed(int Speed); // 设置车速 public int getSpeed(); // 获得车速 public void move(); // 移动的距离 public void display(); // 显示车的颜色 } class Honda implements Car { // 定义一个继承了car接口的轿车本田 String color; int speed; public void setColor(String color) { this.color = color; } public String getColor() { return this.color; } public int getSpeed() { return this.speed; } public void setSpeed(int speed) { this.speed = speed; } public void move() { System.out.println("本田车已经移动到:" + 3 * speed); } public void display() { System.out.println("本田车的颜色为:" + color); } } class Audi { // 定义一个奥迪车,没有实现Car接口 String color; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void display() { System.out.println("奥迪车的颜色为:" + color); } } class AudiAdapter implements Car { private Audi audi; private int speed; public AudiAdapter() { audi = new Audi(); } public void display() { audi.display(); } public String getColor() { return audi.getColor(); } public void setColor(String color) { audi.setColor(color); } // 为奥迪车扩展Move()和setSpeed以及getSpeed的方法 public int getSpeed() { return speed; } public void move() { System.out.println("奥迪车已经移动到:" + 3 * speed); } public void setSpeed(int speed) { this.speed = speed; } }
8.4 垃圾回收
实例161 垃圾回收的机制
public class GarbageCollector { static int count; int index; GarbageCollector() { count++; System.out.println("object " + count + " is constracted"); setid(count); } void setid(int id) { index = id; } protected void finalize(int count) { System.out.println("object " + index + " is GarbageCollectord collection"); } public static void main(String args[]) { new GarbageCollector(); new GarbageCollector(); new GarbageCollector(); new GarbageCollector(); new GarbageCollector(); System.gc(); } }